WMIC を使用することで、GUID 等を知らなくても正しいアンインストーラを起動することができます。
wmic product get name
Windows が内部的に知っているプログラム名の一覧を見る。
wmic product where name="_my_product_name" call uninstall
製品名を探してください。おそらく、“プログラムと機能”コントロールパネルに表示されているものと一致していると思いますが、必ずしも一致しているとは限りません。
0x1&
を使用してアンインストールを実行することができます。沈黙するかどうかは、インストーラ/アンインストーラのビルド方法に依存します)。)
詳細はこちらをご覧ください。
microsoft.comにもWMICのリファレンスドキュメントがあります。
マイクロソフトのガイドラインに従って適切にインストールされたすべてのプログラムは、HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
にレジストリエントリを作成します。通常、プログラムのキーはそのプログラムのGUID、またはプログラム名になります。そのキーの中には、UninstallString
というエントリがあります。これには、プログラムをアンインストールするために実行するコマンドが含まれています。
アンインストールするプログラムが事前に分かっている場合は、バッチファイルにそれを記述するだけで十分に簡単です。しかし、このプロセスを自動化しようとすると厄介なことになります。reg
コマンドを使ってレジストリからデータを取得することができますが、与えられたキーの実際の値の周りに多くのテキストが返されるため、使いづらいです。レジストリから変数にデータを取得するためには、VBscript や PowerShell を使ってみるのが良いでしょう。
Windows Installerを使用しているプログラムであれば、以下のいずれかのコマンドを使用することができます。
msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>
ただし、製品コードもインストールに使用したオリジナルのMSIファイルも持っていない可能性が高いです。
0x1&
しかし、インストールに使用した製品コードもオリジナルの MSI ファイルも持っていない可能性が高いです。独自のアンインストール実行ファイルを提供しているかもしれませんが、その実行ファイルに GUI なしで実行する方法が含まれているかどうかは、個々のソフトウェアパッケージに依存します。
これはバッチを使用してソフトウェアのUninstallStringレジストリキーを見つけてから、ソフトウェアを静かにアンインストールしています。
VBScriptスクリプトを使用して、必要なプログラムをアンインストールすることができます。
このスクリプトを使用するには、レジストリにあるソフトウェア名が必要です。
スクリプトにアプリケーション名を入力し、管理者権限で実行するだけで、アプリケーションがアンインストールされます。スタンドアロンのセットアップや、レジストリのアンインストール文字列にエントリを作成していないアプリでは、スクリプトは動作しません。
その場合、アプリケーションをアンインストールする別の方法を見つける必要があります。
コード。
On error resume Next
Dim strName, WshShell, oReg, keyname
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
'=============================================
'Change the value here with DisplayName's value
strName = " "
'=============================================
Set WshShell = CreateObject("WScript.Shell")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
keyname = ""
keyname = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subkey & "\DisplayName")
If keyname = strName then
i = subkey
End If
Next
If i Then
WshShell.Run "MSIEXEC.EXE /X " & i & " /QN", 1, True
End If
Set WshShell = Nothing
set ObjReg = Nothing
WScript.Quit