常に右往左往

取り留めのない感じで色々と

自動で一時的に管理者権限ユーザでプログラムを実行したい

っていようなことが発生して調査したこと
とりあえずバッチでやるかのー

dosコマンドにはsudoみたいなものはないんか?

ということで調べたらそれっぽいものがあった。それは・・・
runas

使い方は下記を参照 www.atmarkit.co.jp というわけで下記の通りバッチ書いて検証

@echo off
REM Runasコマンドを使って一時的に
REM 管理者ユーザー(Administrator)でコマンドプロンプトを実行
runas /user:Administrator cmd.exe

実行結果 こんな感じで指定したユーザーのパスワードを入力する f:id:gabateru:20180331202905p:plain

正しいパスワードを入力すると指定したユーザーとしてコマンドプロンプトが起動される f:id:gabateru:20180331203054p:plain

パスワードは手打ちしかできないんか?

パスワード手打ちさせては自動化とは言わんな~とか思ってしばし考えて思いついたこと・・・
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 配置でのセキュリティ、バージョン管理、およびマニフェストの問題

まぁ今後何かに生かせればいいかな?