WSH(VBScript)を用いて作成した設定系スクリプトをWindows7で実行するとエラーが発生して動作しない現象に遭遇しました。調査してみると Vista以降に搭載された User Account Control(以下UAC)機能が原因でした。うちの会社は、XPからVistaを飛び越してWindows7 になったので最近になって発覚となりました。。。対処方法を記録に残します。
スポンサーリンク
参考サイト
Vistaにおいて、VBScriptスクリプト中で管理者権限に移行する方法 » Jeans & Development
対処方法
UAC機能を回避するには、スクリプトを「管理者として実行」する必要があります。参考サイトから、ShellExecute メソッドで、runas オプションを付けることで可能となることがわかりました。これを利用して、"OSバージョンを判定してVista以降であれば「管理者として実行」として再帰する" というコードを既存スクリプトの先頭に追加して対処しようと思います。
注意点
- 「管理者として実行」すると、スクリプト内でのカレントディレクトリが「system32」となる
これはハマりました。スクリプト内でカレントディレクトリを取得している処理がある場合は、
この部分も修正が必要となります。対処方法は、ShellExecute メソッドで再帰時に引数で、
カレントディレクトリを渡します。具体的な部分は、サンプルを参照してください。 - スクリプトでエラーは発生しなくなるが、UACの権限昇格ダイアログが表示される
「はい」を選択してもらえばOKです。(これは仕方がない?)
サンプル