グラフィカルインターフェイスなしでCMDを使ってプログラムをアンインストールする方法はありますか?
Microsoftのガイドラインに従って正しくインストールされたプログラムはすべて、HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
にレジストリエントリを作成します。通常、プログラムのキーはそのGUID、またはプログラムの名前です。そのキーの中にはUninstallString
と呼ばれるエントリがあります。これは、プログラムをアンインストールするために実行するコマンドを含みます。
何をアンインストールするのかを事前に知っている場合は、それをバッチファイルに入れるだけで十分簡単です。ただし、そのプロセスを自動化しようとすると、注意が必要です。レジストリからデータを取得するためにreg
コマンドを使用できますが、指定されたキーの実際の値の周囲に多くのテキストが返されるため、使用するのが難しくなります。 VBscriptまたはPowerShellを使用して試してみることをお勧めします。これらは、レジストリから変数にデータを取り込むためのより良いオプションがあるためです。
WMICを使用すると、GUIDなどを知らなくても正しいアンインストーラを起動できます。
Windowsによって内部的に認識されているプログラムの名前の一覧を表示するには。
wmic product get name
あなたの製品名を探してください。おそらく「プログラムと機能」のコントロールパネルに記載されているものと一致しますが、必ずしもそうとは限りません。
それからあなたは使用することができます
wmic product where name="_my_product_name" call uninstall
aFAIKはサイレントでなければなりません(ファームに賭ける前に試してください。沈黙はあなたのインストーラ/アンインストーラがどのように構築されたかに依存するかもしれません)。
詳しくはこちらをご覧ください。
Microsoft.comにはWMICの参照ドキュメントもあります。
PowerShell 3(またはそれ以降)がインストールされている場合は、WMI呼び出しを発行してすべてのプログラムに特定のもの(または特定のものに似た名前、ワイルドカード検索)を実行させ、それぞれに対してUninstall
メソッドを呼び出す:
(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()
プログラムがWindowsインストーラを使用している場合は、次のいずれかのコマンドを使用できます。
msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>
ただし、製品コードも、インストールに使用された元のMSIファイルもない可能性があります。
それ以外には、一般的なアンインストールコマンドはありません。Windowsインストーラーを使用しないインストーラーはオペレーティングシステムによって「不明」であるためです。それらは独自のアンインストール実行可能ファイルを提供するかもしれませんが、その実行可能ファイルがGUIなしでそれを実行する方法を含むかどうかは個々のソフトウェアパッケージに依存します。
MSIインストーラファイルがどこにあるか知っているなら、あなたは使うことができます:
Msiexec/uninstall Application.msi/quiet
VBScriptスクリプトを使用すると、requireプログラムをアンインストールできます。
このスクリプトを使用するには、レジストリにあるソフトウェア名が必要です。
スクリプトにアプリケーション名を入力して管理者権限で実行するだけです。アプリケーションをアンインストールします。しかし、これはウィンドウベースのアプリケーションでしか機能しません。レジストリのアンインストール文字列にエントリを作成しないスタンドアロンのセットアップまたはアプリの場合、スクリプトは機能しません。
その場合は、アプリケーションをアンインストールする別の方法を見つける必要があります。
コード:
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
これをチェックしてください、これはソフトウェアのUninstallStringレジストリキーを見つけて、それから静かにソフトウェアをアンインストールするバッチを使っています - wmicと比べてはるかに信頼できる 私は見つけました。 https://community.spiceworks.com/topic/2143980-deploy-or-upgrade-Java-8-via-shutdown-script-remove-old-javas
::It extracts software software GUID, then use the GUID to search the name and version
@echo off
setlocal ENABLEDELAYEDEXPANSION
set SoftwareName=Java 8
set NewVersion=8.0.1720.11
set x86GUID=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
set x64GUID=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set Installer=\\dc\sources\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_Java=1 WEB_Java_SECURITY_LEVEL=H /s
REM set Installer=d:\downloads\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_Java=1 WEB_Java_SECURITY_LEVEL=H /s
REM It's faster to first locate the software GUID, then search it's Name, Version & UninstallString
for /f "delims=" %%P in ('reg query "%x86GUID%" /s /f "%SoftwareName%" 2^>nul ^| findstr "HKEY_LOCAL_MACHINE"') do (
echo %%P
reg query "%%P" /v "DisplayVersion" 2>nul | findstr /r /c:" %NewVersion%" >nul && (
for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo %%B has already been installed
for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayVersion" 2^>nul ^|findstr "DisplayVersion"') do echo Version: %%B
goto :EOF
) || (
for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo Found other version %%B, upgrade in progress
for /f "tokens=2*" %%A in ('reg query "%%P" /v "UninstallString" 2^>nul ^|findstr "UninstallString"') do (
echo %%B | findstr /c:"MsiExec.exe" >nul && (
set MsiStr=%%B
set MsiStr=!MsiStr:/I=/X!
echo !MsiStr! /quiet /norestart
!MsiStr! /quiet /norestart
rem %Installer%
) || (
echo None MsiExec Uninstall String %%B
rem "%%B" /S
)
)
)
)
if not defined MsiStr (
echo %SoftwareName% not found, install it?
rem %Installer%
)
endlocal
正解は上記ですが、Windows X64インストールの場合は、次の点も確認する必要があります。
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\