locked
Windows7にてUACのダイヤログを表示させないようにプログラムを実行する。 RRS feed

  • 質問

  • 現在、サーバーにあるファイル(mdb、xls、txt、exeなど)をVBScriptのプログラムでにてクライアントPCに配布しております。
    配布先は、C:\Program Files\[アプリ用フォルダ]\の配下です。
    上記の配付システムをWindows XP から WIndows 7 で同様の動作を行うようにする必要があります。

    【前提】
      スクリプトを実行するクライアントPCのUACの権限はインストール時の標準設定のまま変更しないこと。
      Windows XP で実行していた動作と全く同様の動きをすること。
      上記の配付を実施時にUACのダイヤログが表示されないようにする事が目的。

    Q1. Windows 7 のクライアントPCにて、ドメインコントローラー上のAdministratorsグループに属しているユーザーで、
         当該VBScriptを実行しましたが、反応がないため、WScriptをrunasを指定の上で実行して、当該スクリプトを起動するようにしました。

         ----- コードサンプル ------------------------------------------------------------------------------------------
         Set sha = CreateObject("Shell.Application") 
         sha.ShellExecute "wscript.exe", """" & 【VBScriptへのパス】 & """ uac", "", "runas"  
         -------------------------------------------------------------------------------------------------------------

         しかし、実行時に、UACのダイヤログが表示されてしまいます。
         この、UACのダイヤログにて「はい」を押下すれば、特に問題なく動作しました。
         クライアントPCのUACの設定を変更せずに、上記のVBScriptをUACの警告ダイヤログを出さずに実行可能にすることは可能でしょうか?

    Q2. VBScriptではなく、.NETよりexeを作成し、マニュフェストファイルを作成の上、
         UACのダイヤログを表示しないようにするため、requestedExecutionLevelのLevelをasInvokerに設定しました。

         このexeを実行すると、UACの設定が標準でも、特にダイヤログが表示されることはないのですが、
         プログラム内で C:\Program Files\[アプリ用フォルダ]\ に書き込みを行おうとすると、書き込み権限がないため、エラーとなります。

         調査したところ、他のフォルダに書き込めば問題ないようなのですが、これまでと同様の動作を求められており、どうしても C:\Program Files\ に作成したいです。
         クライアントPCのUACの設定を変更せず、かつ、UACのダイヤログを出さずに 
         C:\Program Files\[アプリ用フォルダ]\ にサーバーからファイルをコピーする方法はありますでしょうか?

    たとえば、ExcelやAccessなどはアプリを起動したときにUACの警告が表示されません。
    同様な動きにすることはできないのでしょうか?

    2012年3月23日 8:02

回答

  • 基本的に、UAC を有効にしたまま、昇格せずに Program Files に書き込むことはできません。

    Program Files のコピー先のフォルダーに書き込み可能なように、事前にアクセス許可を設定しておけば書き込めるかもしれません。または、管理者権限で動くサービスをインストールしておくとか。その手の事前準備なしでは無理かと思われます。

    asInvoker、つまり通常の権限では Program Files に書き込めません。これは Excel や Access も同じです。
    もし、Program Files に書き込めたように見えても、エクスプローラーから見れば書き込めていないのでは?古い Excel や Access では書き込めたように見えて、実は別の場所に保存されているだけのことがあり得ますのでご注意ください。

    さて、開発者的な知見では以上のような回答になりますが、ドメイン環境など、管理用の仕組みで何かできる可能性はあるかもしれません。そちらの方面については、私は詳しくないため可否を言及できません。すみません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答の候補に設定 田中夢 2012年3月29日 2:31
    • 回答としてマーク 田中夢 2012年4月2日 2:52
    2012年3月23日 13:33

すべての返信

  • 基本的に、UAC を有効にしたまま、昇格せずに Program Files に書き込むことはできません。

    Program Files のコピー先のフォルダーに書き込み可能なように、事前にアクセス許可を設定しておけば書き込めるかもしれません。または、管理者権限で動くサービスをインストールしておくとか。その手の事前準備なしでは無理かと思われます。

    asInvoker、つまり通常の権限では Program Files に書き込めません。これは Excel や Access も同じです。
    もし、Program Files に書き込めたように見えても、エクスプローラーから見れば書き込めていないのでは?古い Excel や Access では書き込めたように見えて、実は別の場所に保存されているだけのことがあり得ますのでご注意ください。

    さて、開発者的な知見では以上のような回答になりますが、ドメイン環境など、管理用の仕組みで何かできる可能性はあるかもしれません。そちらの方面については、私は詳しくないため可否を言及できません。すみません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答の候補に設定 田中夢 2012年3月29日 2:31
    • 回答としてマーク 田中夢 2012年4月2日 2:52
    2012年3月23日 13:33
  • 何のための UAC か、調べてください。そして、Program Files がどういう場所か、考えてください。

    Jitta@わんくま同盟

    2012年3月24日 3:40
  • こんにちは。
    フォーラム オペレーターの田中夢です。

    Azulean さん、Jitta さん
    いつも参考になるアドバイスをしていただきありがとうございます。

    groovycrue さん
    質問を投稿されてからしばらく経過しましたが、その後 Azulean さんと Jitta さんからの投稿をご覧になっていただけましたか?

    こちらのご質問につきましては、Azulean さん さんからのアドバイスを参考にしていただけたのではないかと思われますので、勝手ながら私のほうで  [回答としてマーク] とさせていただきますね。


    また何かありましたら TechNet フォーラムをご利用くださいね。
    ---------------------------------------------------------------------
    日本マイクロソフト株式会社 フォーラム オペレーター 田中夢

    2012年4月2日 2:51