Programme stillschweigend über CMD deinstallieren
Gibt es eine Möglichkeit, Programme ohne die grafische Oberfläche zu deinstallieren und dies über CMD zu tun?
Gibt es eine Möglichkeit, Programme ohne die grafische Oberfläche zu deinstallieren und dies über CMD zu tun?
Sie können das richtige Deinstallationsprogramm aufrufen, ohne die GUID usw. zu kennen, indem Sie WMIC verwenden.
Um eine Liste der Namen der Programme zu sehen, wie sie intern von Windows bekannt sind:
wmic product get name
Suchen Sie nach Ihrem Produktnamen. Er stimmt wahrscheinlich mit dem überein, der in der Systemsteuerung “Programme und Funktionen” aufgeführt ist, aber nicht immer.
Dann können Sie
wmic product where name="_my_product_name" call uninstall
verwenden, um die Deinstallation durchzuführen, die AFAIK zufolge geräuschlos sein sollte (meiner Erfahrung nach war sie das, aber probieren Sie es aus, bevor Sie sich darauf verlassen. Die Geräuschlosigkeit kann davon abhängen, wie Ihr Installer/Deinstaller gebaut wurde).
Siehe hier für mehr:
Es gibt auch Referenzdokumentation für WMIC auf microsoft.com.
Jedes Programm, das sich ordnungsgemäß nach den Richtlinien von Microsoft installiert, erstellt einen Registrierungseintrag in HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
. Normalerweise ist der Schlüssel für das Programm seine GUID oder der Name des Programms. Innerhalb dieses Schlüssels befindet sich ein Eintrag namens UninstallString
. Dieser enthält den auszuführenden Befehl zur Deinstallation des Programms.
Wenn Sie bereits im Voraus wissen, was Sie deinstallieren werden, sollte es einfach sein, dies in Ihre Batch-Datei zu schreiben. Knifflig wird es allerdings, wenn Sie versuchen, diesen Prozess zu automatisieren. Sie können den Befehl reg
verwenden, um Daten aus der Registry zu erhalten, aber er gibt eine Menge Text um den tatsächlichen Wert eines bestimmten Schlüssels herum zurück, was die Verwendung erschwert. Vielleicht möchten Sie mit VBscript oder PowerShell experimentieren, da diese bessere Optionen zum Abrufen von Daten aus der Registrierung in eine Variable haben.
Wenn Sie PowerShell 3 (oder höher) installiert haben, können Sie einen WMI-Aufruf absetzen, um alle Programme mit einem bestimmten Namen (oder “wie” ein bestimmtes Programm, um Platzhaltersuchen durchzuführen) zu erhalten, und dann die Uninstall
-Methode für jedes dieser Programme aufrufen:
(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()
Wenn ein Programm Windows Installer verwendet, können Sie einen der folgenden Befehle verwenden:
msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>
Allerdings haben Sie wahrscheinlich weder den Produktcode noch die ursprüngliche MSI-Datei, die für die Installation verwendet wurde.
Abgesehen davon gibt es keinen generischen Deinstallationsbefehl, da Installationsprogramme, die nicht den Windows Installer verwenden, dem Betriebssystem “unbekannt” sind. Sie könnten ihre eigene ausführbare Datei zur Deinstallation bereitstellen, aber ob diese ausführbare Datei eine Möglichkeit enthält, sie ohne GUI auszuführen, hängt vom jeweiligen Softwarepaket ab.
Schauen Sie sich dies an, dies ist mit einem Batch den UninstallString-Registrierungsschlüssel der Software finden und dann die Software still und leise deinstallieren, was viel zuverlässiger ist im Vergleich zu wmic Ich fand 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
Ein VBScript-Skript hilft Ihnen bei der Deinstallation des gewünschten Programms.
Um dieses Skript zu verwenden, benötigen Sie den Softwarenamen, der sich in Ihrer Registry befindet.
Geben Sie einfach den Anwendungsnamen in das Skript ein und führen Sie es mit Admin-Rechten aus; es wird die Anwendung deinstallieren. Dies funktioniert jedoch nur bei windowsbasierten Anwendungen; bei eigenständigen Installationen oder Anwendungen, die keinen Eintrag im Deinstallationsstring der Registry haben, funktioniert das Skript nicht.
In diesem Fall müssen Sie also einen anderen Weg finden, um die Anwendung zu deinstallieren.
Code:
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