Programma's in stilte verwijderen via CMD
Is er een manier om programma’s te verwijderen zonder de grafische interface en het via CMD te doen?
Is er een manier om programma’s te verwijderen zonder de grafische interface en het via CMD te doen?
U kunt de juiste uninstaller aanroepen zonder de GUID, enz. te kennen door WMIC te gebruiken.
Om een lijst te zien met de namen van de programma’s zoals die intern bij Windows bekend zijn:
wmic product get name
Zoek uw productnaam. Waarschijnlijk komt die overeen met de naam in het configuratiescherm “Programma’s en onderdelen”, maar dat is niet altijd het geval.
Dan kun je
wmic product where name="_my_product_name" call uninstall
gebruiken om de de-installatie uit te voeren, die AFAIK stil zou moeten zijn (mijn ervaring is dat het zo is, maar probeer het voordat je de boerderij daar op verwed. Stilte kan afhangen van hoe uw installer/uninstaller is gebouwd).
Zie hier voor meer:
Er is ook referentiedocumentatie voor WMIC op microsoft.com.
Elk programma dat zich correct installeert volgens de richtlijnen van Microsoft maakt een registervermelding in HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
. Meestal zal de sleutel voor het programma zijn GUID zijn, of anders de naam van het programma. Binnen die sleutel zal een entry staan met de naam UninstallString
. Dit bevat het commando dat moet worden uitgevoerd om het programma te verwijderen.
Als je van tevoren al weet wat je gaat de-installeren, zou het eenvoudig genoeg moeten zijn om dat in je batchbestand te zetten. Het wordt echter lastig als je dat proces probeert te automatiseren. Je kunt het reg
commando gebruiken om gegevens uit het register te halen, maar het geeft een heleboel tekst terug rond de werkelijke waarde van een bepaalde sleutel, waardoor het moeilijk te gebruiken is. Je zou kunnen experimenteren met VBscript of PowerShell, omdat die betere opties hebben om gegevens uit het register in een variabele te krijgen.
Als je PowerShell 3 (of hoger) geïnstalleerd hebt, kun je een WMI-aanroep doen om alle programma’s te krijgen die een bepaald ding heten (of ‘zoals’ een bepaald ding, om wildcard-zoekopdrachten uit te voeren), en dan voor elk van hen de Uninstall
methode aanroepen:
(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()
Als een programma Windows Installer gebruikt, kun je een van de volgende commando’s gebruiken:
msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>
Waarschijnlijk heb je echter noch de productcode, noch het originele MSI-bestand dat voor de installatie is gebruikt.
Verder is er geen generiek de-installatie commando, omdat installateurs die geen gebruik maken van Windows Installer “onbekend” zijn bij het besturingssysteem. Ze kunnen hun eigen uninstall executable meeleveren, maar of die executable een manier bevat om het zonder GUI uit te voeren hangt af van het individuele softwarepakket.
Kijk hier eens naar, dit is met behulp van een batch te vinden van de software UninstallString registersleutel en vervolgens te verwijderen van de software in stilte die veel betrouwbaarder in vergelijking met wmic Ik vond 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
Een VBScript script zal je helpen om het benodigde programma te verwijderen.
Om dit script te gebruiken heb je de naam van de software nodig die in je register staat.
Voer gewoon de naam van de applicatie in het script in en voer het uit met admin rechten; het zal de applicatie verwijderen. Maar dit werkt alleen voor een window-gebaseerde applicatie; voor standalone setup of apps die geen entry maken in de uninstall string van het register, zal het script niet werken.
Dus in dat geval zul je een andere manier moeten vinden om de applicatie te verwijderen.
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