2011-01-17 04:15:36 +0000 2011-01-17 04:15:36 +0000
30
30

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?

Réponses (8)

26
26
26
2014-07-23 21:33:01 +0000

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.

19
19
19
2011-01-17 05:14:51 +0000

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.

7
7
7
2015-12-29 14:56:33 +0000

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()

5
5
5
2011-01-17 04:24:49 +0000

Jeśli wiesz, gdzie jest plik instalacyjny MSI, możesz użyć:

Msiexec /uninstall Application.msi /quiet.

5
5
5
2011-01-17 04:23:12 +0000

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.

1
1
1
2018-06-30 22:14:12 +0000

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
1
1
1
2015-03-18 17:36:56 +0000

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
0
0
0
2017-06-08 01:49:09 +0000

Prawidłowa odpowiedź znajduje się powyżej, ale dla instalacji Windows X64 należy również sprawdzić:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
```.