大変に悪戦苦闘したので残しておきます。
UAC絡みの件で、PowerShell経由でレジストリの書き換え処理をしたい場合などに使用します。普通であれば.batファイルを呼べばいいだけです。
とにかくリターンコード(exit 0)をきっちり返してあげないと、いつまでも待ち続けて処理が完了いたしません。
POWERSHELLのEXEファイルの位置をプロパティにセット
<Property Id="POWERSHELLEXE"> <RegistrySearch Id="POWERSHELLEXE" Type="raw" Root="HKLM" Key="SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" Name="Path" /> </Property>
CustomActionを定義します
<CustomAction Id="hoge" Property="HOGE" Value=""[POWERSHELLEXE]" -NoProfile -NonInteractive -InputFormat None -Command "Start-Process [PATH_TO_FILE]hoge.bat -verb runas -WindowStyle Hidden -Wait"" />
補足しておくと
-NoProfile -NonInteractive -InputFormat None
あたりはおまじない的に書いておけばよさそう。
管理者権限で実行するため
-verb runas
を渡しておきます。
管理者権限で別ウィンドウで開いて実行するため、
-WindowStyle Hidden
は使えますが、
-NoNewWindow
は使えません。
hoge.bat
#何かしらの処理を書く exit 0
最後きっちり exit 0 を書いておきましょう。
exit /B 0
にする場合はPowerShell側でもexit 0 を返すようにします。
"Start-Process [PATH_TO_FILE]hoge.bat -verb runas -WindowStyle Hidden -Wait;exit 0"