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

Disinstallare i programmi silenziosamente tramite CMD

C'è un modo per disinstallare i programmi senza l'interfaccia grafica e facendolo tramite CMD?

Risposte (8)

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

Potete invocare il disinstallatore corretto senza conoscere il GUID, ecc. usando WMIC.

Per vedere un elenco dei nomi dei programmi come conosciuti internamente da Windows:

wmic product get name

Cerca il nome del tuo prodotto. Probabilmente corrisponde a quello elencato nel pannello di controllo “Programmi e funzionalità”, ma non sempre.

Poi puoi usare

wmic product where name="_my_product_name" call uninstall

per eseguire la disinstallazione, che AFAIK dovrebbe essere silenziosa (lo è stata nella mia esperienza, ma provala prima di scommetterci. Il silenzio potrebbe dipendere da come il vostro installatore/disinstallatore è stato costruito).

Vedi qui per saperne di più:

C'è anche documentazione di riferimento per WMIC su microsoft.com.

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

Ogni programma che si installa correttamente secondo le linee guida di Microsoft fa una voce di registro in HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall. Di solito, la chiave del programma sarà il suo GUID, oppure il nome del programma. All'interno di quella chiave ci sarà una voce chiamata UninstallString. Questa contiene il comando da eseguire per disinstallare il programma.

Se sai già in anticipo cosa disinstallerai, dovrebbe essere abbastanza facile metterlo nel tuo file batch. Diventa complicato quando si cerca di automatizzare il processo. Puoi usare il comando reg per ottenere dati dal registro, ma restituisce un sacco di testo intorno al valore effettivo di una data chiave, rendendolo difficile da usare. Potresti voler sperimentare l'uso di VBscript o PowerShell, dato che hanno opzioni migliori per ottenere dati dal registro in una variabile.

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

Se avete installato PowerShell 3 (o superiore), potete fare una chiamata WMI per ottenere tutti i programmi che si chiamano come una certa cosa (o ‘come’ una certa cosa, per fare ricerche con caratteri jolly), e poi chiamare il metodo Uninstall per ognuno di loro:

(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()

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

Se sapete dove si trova il file di installazione MSI potete usare:

Msiexec /uninstall Application.msi /quiet

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

Se un programma usa Windows Installer, puoi usare uno dei seguenti comandi:

msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>

Tuttavia, è probabile che tu non abbia né il codice del prodotto né il file MSI originale usato per l'installazione.

A parte questo, non esiste un comando generico di disinstallazione, poiché gli installatori che non fanno uso di Windows Installer sono “sconosciuti” dal sistema operativo. Potrebbero fornire il proprio eseguibile di disinstallazione, ma se quell'eseguibile include un modo per eseguirlo senza GUI dipende dal singolo pacchetto software.

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

Controlla questo, questo è usare un batch per trovare la chiave di registro UninstallString del software e poi disinstallare il software silenziosamente che è molto più affidabile rispetto a wmic Ho trovato 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

Uno script VBScript vi aiuterà a disinstallare il programma richiesto.

Per usare questo script avrete bisogno del nome del software che si trova nel vostro registro.

Inserite semplicemente il nome dell'applicazione nello script ed eseguitelo con i privilegi di amministratore; disinstallerà l'applicazione. Ma questo funzionerà solo per un'applicazione basata su finestra; per un'installazione standalone o per applicazioni che non fanno una voce nella stringa di disinstallazione del registro, lo script non funzionerà.

Quindi in questo caso dovrete trovare un altro modo per disinstallare l'applicazione.

Codice:

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

La risposta corretta è sopra, ma per le installazioni di Windows X64 dovrete anche controllare:

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