Domanda

msiexec è un software del prompt dei comandi che installa un file MSI programma.Ma ho scoperto che puoi installare un file MSI dalla riga di comando semplicemente digitando il nome del file MSI sulla riga di comando.

Ma per disinstallare il file MSI, sembra che tu debba chiamare il file msiexec programma e dagli un /x O /uninstall.

Come posso disinstallare un MSI dalla riga di comando senza utilizzare il file msiexec routine?

È stato utile?

Soluzione

Risposta breve: non puoi. Usa MSIEXEC / x

Risposta lunga: quando esegui il file MSI direttamente dalla riga di comando, tutto ciò che accade è che esegue MSIEXEC per te. Questa associazione è memorizzata nel registro. Puoi visualizzare un elenco di associazioni andando (in Esplora risorse) andando su Strumenti / Opzioni cartella / Tipi di file.

Ad esempio, puoi eseguire un file .DOC dalla riga di comando e WordPad o WinWord lo apriranno per te.

Se guardi nel registro sotto HKEY_CLASSES_ROOT\.msi, vedrai che i file .MSI sono associati al ProgID " Msi.Package " ;. Se guardi in HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command, vedrai la riga di comando che Windows utilizza effettivamente quando & Quot; esegui & Quot; un file .MSI.

Altri suggerimenti

Esistono molti modi per disinstallare un pacchetto MSI.Questo è inteso come "riferimento".

In sintesi puoi disinstallarlo tramite: msiexec.exe, ARP, WMI, PowerShell, Sistemi di distribuzione come SCCM, VBScript /COM Automazione, DTF, o tramite cartella cache nascosta di Windows, e alcune altre opzioni presentate di seguito.

I primi paragrafi forniscono importanti informazioni MSI, poi ci sono 14 sezioni con diversi modi per disinstallare un file MSI.Puh.

"Babble, Babble - Over": Sezioni 1, 2 E 3 sono i i normali approcci di disinstallazione (e quindi consigliato). Personally I use option 3 or 5 from section 3 (Entrambe le opzioni con registrazione, ma l'opzione 5 funziona in silenzio anche).Se sei molto occupato, Salta tutte le chiacchiere e scegli uno di questi - farà il lavoro.


Se hai problemi con la disinstallazione completa e stanno cercando un'alternativa al deprecato MsiZap.exe e/o l'utilità Windows Installer CleanUp (MSICUU2.exe), puoi provare il nuovo Strumento FixIt di Microsoft (o la pagina internazionale).Apparentemente potrebbe funzionare anche per altri problemi di installazione.


Se pensi MSI E Programma di installazione di Windows è più un problema che un valore, potresti voler leggere i vantaggi aziendali derivanti dall'utilizzo dei file MSI.


Installa lo script MSI le configurazioni generalmente vengono racchiuse in a file setup.exe.Per saperne di più sui parametri da utilizzare per disinstallare tali configurazioni, consultare questi collegamenti: Foglio di riferimento pdf setup.exe, Parametri della riga di comando Setup.exe e Update.exe.


Alcuni file MSI vengono installati come parte di gruppi tramite meccanismi come Bruciare (WiX Toolkit) o Installa Shield Suite progetti.Ciò può rendere la disinstallazione leggermente diversa da quanto illustrato di seguito.Qui è un esempio per i progetti InstallShield Suite.


Tieni presente che l'esecuzione di uninstall silenziosamente O in modo interattivo può causare risultati diversi (!).Per una descrizione piuttosto lunga del motivo per cui questo è il caso, leggi questo post: La disinstallazione dal Pannello di controllo è diversa dalla Rimuovi da .msi


Se ti viene chiesto inaspettatamente il supporto di installazione originale quando tenti di disinstallare, leggi questa risposta: Perché MSI richiede il file .msi originale per procedere con la disinstallazione? e forse anche la sezione 12 di seguito per alcuni importanti dettagli tecnici.


Se hai CCleaner o strumenti di pulizia simili installati, magari vai a sezione 11.


Se la disinstallazione non riesce completamente (non è possibile eseguirla), vedere le sezioni 12 e 13 di seguito per un potenziale modo per "disfare" l'installazione utilizzando ripristino del sistema e/o strumenti di pulizia.


1. Using the original MSI

  • Se hai accesso all'MSI originale utilizzato per l'installazione, puoi semplicemente fare clic con il tasto destro dentro Windows Explorer e seleziona Disinstallare.
  • È inoltre possibile disinstallare tramite riga di comando come spiegato nella sezione 3.

2. Using the old ARP Applet OR new Windows 8/10 Settings Interface

  • Devo solo menzionare gli approcci normali anche se è ovvio

    • ARP = Add / Remove Programs Applet (appwiz.cpl)
    • Windows 10 Settings Interface => Nuova shell per la stessa operazione
  • ARP:

    • Andare inizio correre appwiz.cpl ACCEDERE per aprire l'applet Aggiungi/Rimuovi programmi (o fai clic su Aggiungi/Rimuovi programmi nel pannello di controllo)
    • Fare clic su "Rimuovere" per il prodotto che si desidera disinstallare
  • Interfaccia delle impostazioni (Windows 8/10):

    • Utilizza la nuova GUI delle impostazioni in Windows 8/10
    • Tasto Windows + Tocca IO => Apps & Features.Seleziona la voce e disinstalla.
    • Alcune segnalazioni di errori quando si richiama la disinstallazione in questo modo.Si prega di aggiungere commenti qui sotto se visti.

3. Using msiexec.exe command line (directly or via a batch file)

  • È possibile disinstallarlo tramite il prompt dei comandi (cmd.exe), file batch o o anche dall'interno di un eseguibile come a funzionamento della shell.
  • Puoi farlo passando il file GUIDA del prodotto (controlla qui sotto per sapere come trovarlo GUIDA) o il percorso del file MSI originale, se disponibile, a msiexec.exe.
  • Per tutte le righe di comando seguenti puoi aggiungere /qn A eseguire la disinstallazione in modalità silenziosa.Ecco come viene eseguita una disinstallazione quando attivata dall'applet di aggiunta/rimozione.

    • Opzione 1:Disinstallazione interattiva di base (accesso al file MSI originale):

       msiexec.exe /x "c:\filename.msi"
      
    • Opzione 2:Disinstallazione interattiva di base tramite GUID del prodotto (nessun accesso al file MSI originale - ecco come trovare il GUID del prodotto - stesso link come sotto):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • Opzione 3:Disinstallazione interattiva con file di registro dettagliato:

       msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
      
    • Opzione 4:Disinstallazione interattiva con file di registro dettagliato e svuotato (opzione dettagliata, flush to log - scrivere il registro continuamente, può essere molto lento):

       msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
      
      • L'opzione flush to log rallenta la disinstallazione perché il file di registro viene scritto in modo continuo anziché in batch.Ciò garantisce che nessun buffer di registro venga perso in caso di arresto anomalo dell'installazione.

      • In altre parole, abilita questa opzione se la tua configurazione si blocca e non ci sono informazioni utili nel tuo file di registro dettagliato.Rimuovi il punto esclamativo per disattivare l'opzione flush to log e la disinstallazione sarà molto più rapida.Si ottiene ancora una registrazione dettagliata, ma, come affermato, parte del buffer di registro potrebbe andare perduta.

    • Opzione 5 (consigliata):Disinstallazione silenziosa con file di registro dettagliato: eliminazione dei riavvii (nessun flush to log - vedi l'opzione precedente per cosa significa):

       msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=R
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=R
      

      Spiegazione rapida dei parametri (poiché consiglio questa opzione):

       /X = run uninstall sequence
       /QN = run completely silently
       /L*V "C:\msilog.log"= verbose logging at path specified
       {11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
       REBOOT=R = prevent unexpected reboot of computer
      

      Ancora una volta, come trovare la guida del prodotto:Come posso trovare il GUID del prodotto di una configurazione MSI installata? (per la disinstallazione se non si dispone dell'MSI originale da specificare nel comando di disinstallazione).

  • Il miglior consiglio:Se crei un file di registro per la disinstallazione, puoi individuare i problemi nel registro tramite cercando "valore 3".Ciò è particolarmente utile per i file dettagliati, perché sono così, beh, dettagliati :-).

  • Come trovare il GUID del prodotto per un MSI installato?

  • Ulteriori informazioni sull'accesso da installsite.org: Come posso creare un file di registro della mia installazione? - Ottima panoramica delle diverse opzioni e anche delle specifiche della registrazione di InstallShield.

  • Msiexec (opzioni della riga di comando) - Panoramica della riga di comando per msiexec.exe da MSDN.Qui è la versione Technet.

4. Using the cached MSI database in the super hidden cache folder

  • MSI rimuove tutti i CAB (versioni precedenti di Windows) e memorizza nella cache ogni MSI installato in una cartella di sistema super nascosta all'indirizzo %SystemRoot%\Installatore (è necessario mostrare i file nascosti per vederlo).
  • NB:Questa cartella nascosta supper viene ora trattata in modo diverso a partire da Windows 7. I file MSI ora vengono memorizzati nella cache a grandezza naturale.Leggi il thread collegato per maggiori dettagli: lettura consigliata a chiunque trovi questa risposta e armeggia con impostazioni pericolose di Windows.
  • A tutti i file MSI qui verrà assegnato un nome casuale (formato esadecimale), ma puoi ottenere informazioni su ciascun MSI mostrando la barra di stato di Esplora risorse (Visualizza -> Barra di stato) e quindi selezionando un MSI.Il flusso di riepilogo dell'MSI sarà visibile nella parte inferiore della finestra di Esplora risorse.Oppure, come sottolinea Christopher Galpin, attiva la colonna "Commenti" in Esplora risorse e seleziona il file MSI (vedere questo articolo per sapere come eseguire questa operazione).
  • Una volta trovato l'MSI corretto, fai semplicemente clic con il pulsante destro del mouse e vai su Disinstalla.
  • Puoi anche utilizzare PowerShell per mostrare il percorso completo del pacchetto memorizzato nella cache locale insieme al nome del prodotto.Questa è l'opzione più semplice secondo me.
  • Per accendere PowerShell: tieni premuto il tasto Windows, tocca R, rilascia il tasto Windows, digita "powershell" e premi OK.Poi massimizzare la finestra di PowerShell ed esegui il comando seguente:
    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Enter image description here


5. Using PowerShell

  • C'è uno script PowerShell simile, ma più completo, disponibile su MSDN.Consente di eseguire la disinstallazione su più macchine.
  • Voce aggiunta da Even Mien:

    $app = Get-WmiObject -Class Win32_Product -Filter "Name = 'YOUR_APP'"
    $app.Uninstall()
    
  • Questo approccio funzionerà, ma l'accesso alla classe WMI Win32_Product attiverà un file controllo della coerenza del software che è molto lento e in circostanze particolari può causare l'attivazione di un'autoriparazione MSI.Vedi questo articolo: Script di disinstallazione di PowerShell: hai un vero mal di testa

  • Non l'ho testato personalmente, ma sembra che $app.Uninstall() possa eseguire UninstallString registrato nelle impostazioni del registro dell'applet ARP.Ciò significa che in alcuni casi potrebbe essere eseguita la modifica anziché la disinstallazione.
  • Consulta questo argomento per ulteriori dettagli e modalità di disinstallazione tramite Powershell: Come posso disinstallare un'applicazione utilizzando PowerShell?

6. Using the .NET DTF Class Library (parte di il kit di strumenti WiX)

    using Microsoft.Deployment.WindowsInstaller;

    public static void Uninstall( string productCode)
    {
      Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
    }

7. Using the Windows Installer Automation API


8. Using a Windows Installer major upgrade

  • Potrebbe verificarsi un aggiornamento importante di Windows Installer come parte dell'installazione di un altro file MSI.
  • Un importante aggiornamento viene creato identificando i prodotti correlati negli MSI "Tabella di aggiornamento".Queste configurazioni correlate vengono quindi gestite come specificato nella tabella.Generalmente ciò significa che vengono disinstallati, ma è anche possibile interrompere la configurazione principale (tipicamente utilizzata per rilevare versioni successive della propria applicazione presenti sulla confezione).

9. Using Deployment Systems / Remote Administration Systems

  • SCCM, CA Unicenter, Tivoli dell'IBM, Altiris Client Management Suite e molti altri
  • Questi strumenti offrono una gestione avanzata del PC client e includono l'installazione e la disinstallazione dei file MSI
  • Questi strumenti sembrano utilizzare una combinazione di msiexec.exe, automazione, WMI, eccetera...e persino il loro modo di invocare installazioni e disinstallazioni.
  • Nella mia esperienza, questi strumenti presentano molta "personalità" ed è necessario adattarsi ai loro diversi modi di fare le cose.

10. Using WMI - Windows Management Instrumentation


11. Using a third-party tool such as ccleaner or similar

  • Diverse applicazioni Windows dispongono di una propria interfaccia per disinstallare non solo i pacchetti MSI, ma anche i programmi di installazione legacy.
  • Non voglio qui dare consigli specifici su strumenti (soprattutto quelli commerciali), ma quelli ben noti CCleaner presenta un'interfaccia di disinstallazione di questo tipo (e ha una versione gratuita).Dovrei aggiungere anche questo questo strumento ha subito recentemente un attacco malware.
  • Immagino che dovremmo tutti ricordare che anche software innocuo può essere inoculato con malware nelle posizioni di download (attacco FTP).
    • Io uso virustotal.com per controllare i miei download e anche Esplora processi Sysinternals per controllare i processi in esecuzione dopo l'installazione, insieme al normale software di sicurezza (a seconda di quale sia disponibile).
    • Con questo approccio di solito si trova una quantità sorprendente di software in "aree grigie" (barre degli strumenti, smiley, adware, ecc...), insieme a numerosi falsi positivi (possono anche causare problemi poiché i software di sicurezza bloccano il loro accesso o li mettono in quarantena facendo un molta confusione).E sicuramente anche malware reale.
    • Alcuni suggerimenti sull'utilizzo di Process Explorer possono essere trovati qui - una serie di tweet - a cui si collega questo strumento Process Explorer VirusTotal.com per controllare in modo interattivo tutti i processi in esecuzione: tutto ciò di cui hai bisogno sono pochi passaggi di configurazione.
    • Dovrei notare che Process Explorer produce un controllo della firma dei file, ma nessuna euristica, per quanto ho capito (nessun controllo per operazioni sospette, solo un controllo con oltre 60 suite di sicurezza per i file contrassegnati).Hai bisogno di uno strumento di sicurezza regolare per la protezione euristica online interattiva.
    • Per quello che vale, penso che alcuni software di sicurezza rasentiranno a causare più problemi di falsi positivi di quanti ne facciano i malware.Le ultime parole famose nell'era dei ransomware...
    • Questa è una digressione abbastanza ampia: semplicemente non voglio vedere le persone scaricare malware.Fare il vostro virustotal.com controlla almeno.
  • La disinstallazione in questo modo dovrebbe funzionare correttamente.Penso che questi strumenti rovinino troppe cose quando provi le loro "funzionalità di pulizia".Usare con cautela.Se usi solo la funzione di disinstallazione, dovresti essere a posto.

12. Using a cleanup tool such as msizap or similar

  • Per completezza msizap.exe dovrebbe essere menzionato anche se lo è deprecato, non supportato E obsoleto.Non dovrebbe essere utilizzato su nessuna versione di Windows più recente
  • Questo strumento da riga di comando (msizap.exe) aveva anche una GUI disponibile (MSICUU2.exe).Entrambi gli strumenti sono deprecati.
  • La destinazione d'uso di questi strumenti era quella di eliminare le disinstallazioni non riuscite:
  • Generalmente per il raro caso in cui manca erroneamente l'MSI memorizzato nella cache con il nome casuale e la disinstallazione fallisce per questo motivo mentre viene richiesto l'MSI originale.Questo è un problema raro, ma l'ho visto io stesso.Solo alcune potenziali cause: Spostato in questa risposta.
    • Parole chiave:Interferenza nel ripristino del sistema, app di pulizia errate, arresto anomalo di msiexec.exe, interruzione dell'alimentazione, interferenza del software di sicurezza, errori di debug dello sviluppo MSI (codici di pacchetto identici, ecc...), armeggi e hacking dell'utente (cosa c'è qui?risparmiare spazio?), ecc...
    • Potrebbe anche essere utilizzato per eliminare qualsiasi installazione MSI, anche se ovviamente non è consigliabile.
    • Maggiori informazioni: Perché MSI richiede il file .msi originale per procedere con la disinstallazione?
  • Questo nuovo strumento di supporto (anche questo strumento è ora deprecato) può essere provato sulle versioni recenti di Windows se si hanno pacchetti MSI defunti che necessitano di disinstallazione.
  • Alcuni hanno suggerito di utilizzare lo strumento collegato qui da saschabeaumont: Disinstallare senza file MSI.Se lo provi e funziona, assicurati di farcelo sapere.
  • Se si ha accesso all'MSI originale effettivamente utilizzato per installare il prodotto, è possibile utilizzarlo per eseguire la disinstallazione.Deve essere l'esatto MSI utilizzato e non solo uno simile.

13. Using system restore ("installation undo" - last resort IMHO)

  • Questo non è in senso stretto un modo per "disinstallare" ma a "disfare" l'ultima installazione o più installazioni.
  • Il ripristino tramite un punto di ripristino riporta il sistema allo stato a stato di installazione precedente (puoi trovare video demo di questo su YouTube o un sito simile).
  • Tieni presente che la funzionalità può essere disabilitata interamente o parzialmente: è possibile disabilitarla in modo permanente per l'intera macchina o ad hoc per installazione.
  • Ho notato nuovi problemi di installazione irrisolvibili derivanti da un ripristino del sistema, ma normalmente funziona bene.Ovviamente non utilizzare la funzione per divertimento.È l'ultima risorsa ed è meglio utilizzarla rollback di nuovi driver o configurazioni appena installate che causano problemi immediati (schermo blu, riavvii, instabilità, ecc...).
  • Più a lungo torni indietro, più rielaborazioni creerai per te stesso e maggiore sarà il rischio.La maggior parte dei sistemi presenta solo pochi punti di ripristino e la maggior parte di essi risale a solo un mese o due, credo.
  • Tieni presente che il ripristino del sistema potrebbe influire Aggiornamenti di Windows che deve quindi essere riapplicato, così come molte altre impostazioni di sistema.Al di là dei puri fastidi, ciò può anche causare il riemergere di problemi di sicurezza e potresti voler eseguire un controllo di sicurezza specifico sulle caselle di destinazione utilizzando Analizzatore di sicurezza Microsoft Baseline o strumenti simili.
  • Dato che ho menzionato il ripristino del sistema, suppongo che dovrei menzionarlo la funzione Ultima configurazione sicuramente funzionante.Questa funzionalità non ha nulla a che fare con la disinstallazione o il ripristino del sistema, ma è l'ultima configurazione di avvio che ha funzionato o ha prodotto un sistema in esecuzione.Può essere utilizzato per riavviare il sistema in caso di schermata blu o arresto durante l'avvio.Ciò accade spesso dopo l'installazione del driver.

14. Windows Installer Functions (C++)

Per completezza, credo che dovremmo menzionare il nocciolo di tutto: il modo concreto: le funzioni API di Windows Installer Win32.Queste sono probabilmente le funzioni utilizzate dalla maggior parte, se non da tutti, gli altri approcci elencati sopra "sotto il cofano".Sono utilizzati principalmente da applicazioni o soluzioni che trattano direttamente con MSI come tecnologia.

C'è una risposta su serverfault.com che potrebbe interessare un riepilogo dei diversi approcci programmatici per la disinstallazione (Funzioni di installazione COM Automation, .NET, Win32).

Di seguito troverai uno snippet C++ che mostra come disinstallare Orca, 10.1.17134.12 per codice prodotto utilizzando una chiamata al Funzione MsiConfigureProductEx.Per disinstallare un altro prodotto, sostituire il GUID specificato per prodcode con quello per il tuo prodotto.Per trovare il codice prodotto vedi questa risposta: Come posso trovare il GUID del prodotto di una configurazione MSI installata?

La disinstallazione avverrà in modalità GUI completa.Per eseguire in modalità silenziosa o in qualche altra modalità GUI (ridotta, base, ecc...), consultare: Funzione MsiSetInternalUI.

#include "pch.h"

#define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
#include <windows.h>
#include <msi.h> // Windows Installer
#include <tchar.h> 

#pragma comment(lib, "msi.lib") // To make code link

int main()
{
    const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
    const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12

    UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot);

    return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx
}

Lo snippet è stato realizzato e testato con l'ultima versione di Visual Studio 2017 a settembre 2018:

  1. Crea una nuova "applicazione console Windows" da Visual C++ => Desktop di Windows.
  2. Copia e incolla il codice sopra nel tuo file CPP principale (sostituendo qualunque cosa sia presente).
  3. Dovrebbe essere così per poter eseguire il codice.Magari imposta un punto di interruzione, costruisci ed esegui.

Ricorda inoltre che è possibile avviare una disinstallazione utilizzando il comando WMIC:

wmic product get name - > Verranno elencati i nomi di tutte le app installate

wmic product where name='myappsname' call uninstall - > questo disinstallerà l'app.

L'estensione msi è mappata su msiexec (allo stesso modo digitando un nome file .txt su un prompt dei comandi si avvia Blocco note / predefinito .txt gestore file per visualizzare il file).

Quindi digitando un nome file con estensione .msi si esegue davvero msiexec con il file MSI come argomento e si compie l'azione predefinita, installa. Per questo motivo, la disinstallazione richiede di invocare msiexec con l'opzione di disinstallazione per disinstallarlo.

wmic product get name

Resta bloccato il cmd ... continua a lampeggiare _ dopo un paio di minuti

in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, se riesci a trovare la cartella con il nome del software che stai tentando di installare (non quello denominato con ProductCode), UninstallString punta al programma di disinstallazione dell'applicazione C:\Program Files\Zune\ZuneSetup.exe /x

Proverei la seguente sintassi: funziona per me.

msiexec /x filename.msi /q 

Suppongo che quando digiti int file.msi nella riga di comando, Windows chiama automaticamente msiexec file.msi per te. Sto assumendo questo perché quando si digita picture.png viene visualizzato il visualizzatore di immagini predefinito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top