ClickOnceアプリケーションを自動アンインストールする
というわけで前回ClickOnceアプリケーションを発行する - 常に右往左往 で作ったClickOnceアプリケーションを自動でアンインストールしてみる
自動でアンインストールってどうやるん?
そこから!!
んで調べたらこんな記事を発見!ありがたや~
srz-zumix.blogspot.jp
しかもソースまで記載されている!またまたありがたや~!
実行する前に対象の下記のレジストリ内に前回作ったアプリケーション"TestClickOnce"がおるか確認・・・
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\SOFTWARE\Microsoft\Wow6432Node\Windows\CurrentVersion\Uninstall
え?いないんですけど!!!!
どういうこっちゃ?というわけで再度調べてみると
ClickOnceのインストール情報の場所は違うらしい
ということが分かった
ClickOnceはユーザ毎なので下記にあるらしい
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
※通常のInstallerの場合は前項で確認した場所にある
確認してみるとあったよ
続いてアンインストールコマンドを実行してみる
すると下記の通り保守ダイアログが出た
じゃあバッチを作ろう
というわけで作ったバッチはこちら
@echo off SET REG_UNINSTALL_KEY=HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall for /f "tokens=1,2*" %%A in ('reg query "%REG_UNINSTALL_KEY%"') do ( reg query "%%A" /v DisplayName 2>NUL | findstr /c:"TestClickOnce" 2>NUL >NUL if not errorlevel 1 ( for /f "tokens=1,2*" %%B in ('reg query "%%A" /v UninstallString') do ( if not "x%%D" == "x" ( @echo "%%D" SET UNINSTALL_CMD="%%D" ) ) ) ) call "%UNINSTALL_CMD%" pause
よっしゃ実行じゃ!
・・・あれ?ダイアログは上がってるっぽいけどすぐ消えるんすけど!
ん~別の方法はないかのーと再び検索・・・するとこんな記事を発見
hogege.hatenablog.com
VBScriptでやるか~。でも参考サイトのソースはアンインストールコマンド直打ちなので引数化をしよう
というわけで作ったVBScriptはこちら
[ClickOnce自動アンインストール.vbs]
On Error Resume Next Set objShell = WScript.CreateObject("WScript.Shell") intArgsCount = Wscript.Arguments.Count '引数の数を取得し数が合わなければ処理を中止する。 If intArgsCount <> 2 Then WScript.Echo "引数が" & intArgsCount & "個渡されました。" & vbCrLf _ & "指定可能な引数の数は 2 個なので処理を中止します。" '処理を中断 WScript.Quit End If WScript.Echo "1 個目の引数の値:" & Wscript.Arguments(0) WScript.Echo "2 個目の引数の値:" & Wscript.Arguments(1) ''アンインストールするアプリを念のためKILL objShell.Run "taskkill /f /im Wscript.Arguments(0)*" '' レジストリから取得したUninstallStringを実行する objShell.Run Wscript.Arguments(1) ''アンインストールのダイアログが表示されたら・・・ Do Until Success = True Success = objShell.AppActivate(Wscript.Arguments(0) & " の保守") Wscript.Sleep 200 Loop ''OKを押下しアンインストールを実行する。 objShell.SendKeys "OK"
そんでこいつを呼び出してあげるバッチはこんな感じ
@echo off SET REG_UNINSTALL_KEY=HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall REM アンインストールコマンド取得処理 for /f "tokens=1,2*" %%A in ('reg query "%REG_UNINSTALL_KEY%"') do ( reg query "%%A" /v DisplayName 2>NUL | findstr /c:"TestClickOnce" 2>NUL >NUL if not errorlevel 1 ( for /f "tokens=1,2*" %%B in ('reg query "%%A" /v UninstallString') do ( if not "x%%D" == "x" ( @echo "%%D" SET UNINSTALL_CMD="%%D" ) ) ) ) REM アンインストールコマンド実行VBScript呼び出し cscript //nologo ClickOnce自動アンインストール.vbs "TestClickOnce" ""%UNINSTALL_CMD%"" pause
さて実行結果は?
無事アンインストールされました~!!
やったね!というわけで今回はここまで
【おまけ】最近ず~っと流している曲