SSブログ

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で実行すると

 image

望みどおりUACのダイアログが出てきました。

ちなみにUACのダイアログをキャプチャーするのは

Windows7はUACのレベルをひとつ下げるだけでOKです。超簡単。

image

Vistaはやや面倒

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
\Policies\System

のPromptOnSecureDesktopの値を0に変更します。

image


WSHクイックリファレンス 第2版

WSHクイックリファレンス 第2版

  • 作者: 羽山 博
  • 出版社/メーカー: オライリー・ジャパン
  • 発売日: 2006/10/24
  • メディア: 単行本(ソフトカバー)



最速攻略 VBScriptサンプル大全集

最速攻略 VBScriptサンプル大全集

  • 作者: 結城 圭介
  • 出版社/メーカー: 技術評論社
  • 発売日: 2006/03/28
  • メディア: 大型本



nice!(2)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 2

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました
HP Directplus オンラインストア