UACを表示させてjscriptで昇格する方法 [Windows (Windows Server)]
お仕事でjscriptがUACをオンにしたWindows Vistaや7の環境で動かないのに気が付いたのですが、どうも昇格する方法が分からない。
で、色々調べるとVBScriptならありました。素晴らしい。
Windows VistaでのWSH(VBScript)の管理者権限への昇格方法
これをほとんどパクってJScriptにしました。WSHを使うのでほとんど一緒。
注意しなければならないのは
1.UACで昇格したらカレントディレクトリがsystem32になってしまう。これは要注意です。
2.Vista以降は昇格させてはいけない。ちなみに昇格させるとユーザーを選択するダイアログが出てきます。
の2点だけです。
var Wsh = WScript.CreateObject("WScript.Shell");
var SystemFolder = 1;
//カレントディレクトリ
var Fs = WScript.CreateObject("Scripting.FileSystemObject");
//OSバージョンの取得
var sVer = Fs.GetFileVersion(Fs.BuildPath(Fs.GetSpecialfolder(SystemFolder).Path,"kernel32.dll"));
number = parseInt(sVer);
//Vistaはバージョン6
if(number>= 6){
if(WScript.Arguments.length == 0) {
var sh = WScript.CreateObject("Shell.Application")
//引数にカレントディレクトリをセット
sh.ShellExecute("wscript.exe", "\"" + WScript.ScriptFullName + "\""+ " \"" +
Wsh.CurrentDirectory + "\"", "", "runas", 1);
WScript.Quit(0);
}
}
//カレントディレクトリをセット
//Vista以降の場合は引数にカレントディレクトリが入っています。
var currentDir;
if(WScript.Arguments.length == 0){
currentDir = Wsh.CurrentDirectory;
}else{
currentDir = WScript.Arguments(0);
}
//後は実行したいスクリプトを書くだけ。
//カレントディレクトリは上記のcurrentDirを使います。
これをWindows 7で実行すると
望みどおりUACのダイアログが出てきました。
ちなみにUACのダイアログをキャプチャーするのは
Windows7はUACのレベルをひとつ下げるだけでOKです。超簡単。
Vistaはやや面倒
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
\Policies\System
のPromptOnSecureDesktopの値を0に変更します。
コメント 0