Windows環境でインストーラーによってインストールしたソフトウェアが「プログラムの追加と削除」に表示されないことが稀にあるらしい。
このようなソフトウェアをアンインストールする方法として、Microsoftの公式記事には次の3つの方法が記載されていた。
- プログラムをアンインストールする
- アンインストールフォルダに含まれているアンインストールプログラムを実行する
- レジストリに表示されるアンインストールコマンドを使用する
このうち3つ目のレジストリを参照する方法で対応する場合、参照だけとはいえregeditを直接触るのは若干怖い。
たぶんPowerShellでも取れるやろということで調べてみたら次のような感じでいけるケースがありそうだった。
PowerShellでレジストリからアンインストールコマンドを取得してアンインストールする
例としてmackerel-agentの場合を紹介する。
レジストリキーを取得する
まずはレジストリキーを取得する必要がある。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
上記のパス配下のレジストリ値にソフトウェア名などが登録されていれば、次のようなコマンドを実行するとキーを知ることができる。
(HKEY_LOCAL_MACHINE
はHKLM
のように省略できる。)
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /f mackerel-agent /s
mackerel-agentはDisplayName
の値にそれを含んでいるようなので、次のような結果が返ってくる。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
DisplayName REG_SZ mackerel-agent
この結果の{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
がレジストリキー。
レジストリキーの配下のUninstallStringを取得する
レジストリキー配下のUninstallString
の取得するには以下のコマンドを実行する。
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}" /v UninstallString
次のような結果が返ってくる。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
UninstallString REG_EXPAND_SZ MsiExec.exe /X{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
UninstallStringを実行する
上記の結果から、プログラムの追加と削除からアンインストールを行うとMsiExec.exe /X{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
が実行されている模様。
コマンドプロンプトなどから上記のコマンドを実行すると、プログラムの追加と削除にソフトウェアが表示されない場合でもアンインストールできるようだ。
MsiExec.exe /X{5BF7694F-2891-4383-B2F7-52E6FAFADDC2}
まとめ
regeditでやらかすことなく(実際はそんなことなさそうな気もする)、reg query
という参照コマンドだけで安心してレジストリを覗くことができた。
Windows何もわからん…