Odinstalowywanie programów po cichu za pomocą CMD
Czy istnieje sposób, w jaki mogę odinstalować programy bez interfejsu graficznego i zrobić to poprzez CMD?
Czy istnieje sposób, w jaki mogę odinstalować programy bez interfejsu graficznego i zrobić to poprzez CMD?
Możesz wywołać właściwy deinstalator bez znajomości GUID, itp. za pomocą WMIC.
Aby zobaczyć listę nazw programów znanych wewnętrznie przez Windows:
wmic product get name
Poszukaj nazwy swojego produktu. Prawdopodobnie pasuje ona do tej wymienionej w panelu sterowania “Programy i funkcje”, ale nie zawsze.
Następnie możesz użyć
wmic product where name="_my_product_name" call uninstall
do wykonania odinstalowania, które AFAIK powinno być ciche (z mojego doświadczenia wynika, że było, ale spróbuj, zanim postawisz na to farmę. Cisza może zależeć od tego, jak został zbudowany twój instalator/deinstalator).
Zobacz tutaj po więcej:
Na microsoft.com jest też dokumentacja referencyjna dla WMIC.
Każdy program, który poprawnie zainstaluje się zgodnie z wytycznymi Microsoftu, dokonuje wpisu w rejestrze w pozycji HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
. Zazwyczaj kluczem dla programu będzie jego identyfikator GUID, lub nazwa programu. W tym kluczu znajduje się wpis o nazwie UninstallString
. Zawiera on polecenie, które należy wykonać, aby odinstalować program.
Jeśli już wiesz z wyprzedzeniem, co będziesz odinstalowywał, umieszczenie tego w pliku wsadowym powinno być dość proste. Sprawa staje się jednak trudna, gdy próbujesz zautomatyzować ten proces. Możesz użyć polecenia reg
, aby uzyskać dane z rejestru, ale zwraca ono dużo tekstu wokół rzeczywistej wartości danego klucza, co czyni je trudnym do użycia. Możesz poeksperymentować z użyciem VBscript lub PowerShell, ponieważ mają one lepsze opcje pobierania danych z rejestru do zmiennej.
Jeśli masz zainstalowany PowerShell 3 (lub wyższy), możesz wydać wywołanie WMI, aby uzyskać wszystkie programy o określonej nazwie (lub “podobne” do określonej rzeczy, aby wykonać wyszukiwanie wieloznaczne), a następnie wywołać metodę Uninstall
dla każdego z nich:
(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()
Jeśli program korzysta z Instalatora Windows, możesz użyć jednego z następujących poleceń:
msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>
Jednak prawdopodobnie nie masz ani kodu produktu, ani oryginalnego pliku MSI użytego do instalacji.
Poza tym nie istnieje żadne ogólne polecenie dezinstalacji, ponieważ instalatory, które nie korzystają z Instalatora Windows, są “nieznane” przez system operacyjny. Mogą one dostarczać swoje własne programy wykonywalne do dezinstalacji, ale to, czy zawierają one sposób na uruchomienie ich bez GUI, zależy od konkretnego pakietu oprogramowania.
Sprawdź to, to jest przy użyciu wsadowego znalezienia klucza rejestru UninstallString oprogramowania, a następnie odinstalowania oprogramowania po cichu, co jest dużo bardziej niezawodne w porównaniu do wmic Znalazłem 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
Skrypt VBScript pomoże Ci odinstalować wymagany program.
Do użycia tego skryptu potrzebna jest nazwa programu, która znajduje się w rejestrze.
Wystarczy wpisać nazwę aplikacji do skryptu i uruchomić go z uprawnieniami administratora, a aplikacja zostanie odinstalowana. Ale to będzie działać tylko dla aplikacji opartych na oknie; dla samodzielnych instalacji lub aplikacji, które nie robią wpisu w łańcuchu deinstalacji w rejestrze, skrypt nie będzie działał.
Tak więc w takim przypadku będziesz musiał znaleźć inny sposób na odinstalowanie aplikacji.
Kod:
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