自動で一時的に管理者権限ユーザでプログラムを実行したい
っていようなことが発生して調査したこと
とりあえずバッチでやるかのー
dosコマンドにはsudoみたいなものはないんか?
ということで調べたらそれっぽいものがあった。それは・・・
runas
使い方は下記を参照 www.atmarkit.co.jp というわけで下記の通りバッチ書いて検証
@echo off REM Runasコマンドを使って一時的に REM 管理者ユーザー(Administrator)でコマンドプロンプトを実行 runas /user:Administrator cmd.exe
実行結果 こんな感じで指定したユーザーのパスワードを入力する
正しいパスワードを入力すると指定したユーザーとしてコマンドプロンプトが起動される
パスワードは手打ちしかできないんか?
パスワード手打ちさせては自動化とは言わんな~とか思ってしばし考えて思いついたこと・・・
VBScriptでsendkeysすればいいんじゃね?
さてさっそく下記のようなVBScript書いた
'Shell関連の操作を提供するオブジェクトを取得 Set objShell = WScript.CreateObject("WScript.Shell") '先ほどのrunasコマンドを発行 objShell.Run "runas /user:Administrator cmd.exe" '3秒まつ WScript.Sleep 3000 'パスワード文字列を送信 objShell.SendKeys( "hoge" ) 'Enterキーの入力情報を送信 objShell.SendKeys( "{ENTER}" )
結果は成功!やったぜ!
ただしこれパスワード丸見えになるよ!!!
セキュリティ上問題ない場合にのみ使ってねミ☆
で?やりたいことはできたん?
できなかった!!!
なんでかっていうと対象プログラムがClickOnceアプリケーションだから!
どうもClickOnceアプリケージョンは権限昇格させての実行は許していないらしい
ClickOnce 配置でのセキュリティ、バージョン管理、およびマニフェストの問題
まぁ今後何かに生かせればいいかな?