Disinstallazione di un file MSI dalla riga di comando senza utilizzare msiexec

msiexec è un software di prompt dei comandi che installa un programma MSI . Ma ho trovato che è ansible 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 programma msiexec e dargli un /x o /uninstall .

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

Risposta breve: non puoi. Utilizzare MSIEXEC / x

Risposta lunga: quando si esegue il file MSI direttamente dalla riga di comando, tutto ciò che sta accadendo è che esegue MSIEXEC per te. Questa associazione è archiviata nel registro. È ansible visualizzare un elenco di associazioni tramite (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 si cerca nel registro sotto HKEY_CLASSES_ROOT\.msi , vedrai che i file .MSI sono associati al ProgID “Msi.Package”. Se cerchi nel HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command , vedrai la riga di comando che Windows effettivamente usa quando “esegui” un file .MSI.

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

In sintesi è ansible disinstallare tramite: msiexec.exe , ARP , WMI , PowerShell , Sistemi di distribuzione come SCCM , VBScript / COM Automation, DTF , o tramite la cartella cache di Windows nascosta , e alcune altre opzioni presentate di seguito.

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

Le sezioni 1 , 2 e 3 sono i normali approcci di disinstallazione (e quindi raccomandati). Personalmente utilizzo l’opzione 3 o 5 dalla sezione 3 (entrambe le opzioni con la registrazione, ma l’opzione 5 funziona in modo silenzioso). Se sei molto occupato , salta tutto il chiacchiericcio e vai per uno di questi – finirà il lavoro.


Se si verificano problemi durante la disinstallazione e si sta cercando un’alternativa al deprecato Msizap.exe e / o Windows Installer CleanUp Utility ( msicuu2.exe ), puoi provare il nuovo strumento FixIt da Microsoft ( o dalla pagina internazionale ). Potrebbe apparentemente funzionare anche per altri problemi di installazione.


Se pensi che MSI e Windows Installer siano più problemi di quanti ne valga la pena, potresti leggere i vantaggi aziendali dell’utilizzo dei file MSI .


Le configurazioni di MSI InstallScript sono generalmente racchiuse in un file setup.exe . Per ulteriori informazioni sui parametri da utilizzare per la disinstallazione di tali impostazioni, 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 dei pacchetti tramite meccanismi come Burn (WiX Toolkit) o InstallShield Suite projects. Questo può rendere la disinstallazione leggermente diversa da ciò che è visto sotto. Ecco un esempio per i progetti InstallShield Suite .


Tieni presente che l’esecuzione della disinstallazione in modalità silenziosa o intertriggers può causare risultati diversi (!) . Per una descrizione piuttosto lunga del perché questo è il caso, leggere questo post: La disinstallazione dal Pannello di controllo è diversa da Rimuovi da .msi


Se viene richiesto inaspettatamente il supporto di installazione originale durante il tentativo di disinstallare, leggere questa risposta: Perché MSI richiede il file .msi originale per procedere con una disinstallazione? e forse anche la sezione 12 di seguito per alcuni importanti dettagli tecnici.


Se hai installato CCleaner o strumenti di pulizia simili, forse vai alla sezione 11 .


Se la disinstallazione non riesce completamente (non è ansible eseguire), vedere le sezioni 12 e 13 di seguito per un potenziale modo per ” annullare ” l’installazione utilizzando gli strumenti di ripristino e / o di pulizia del sistema.


1. Utilizzo del MSI originale

  • Se si dispone dell’accesso al MSI originale utilizzato per l’installazione, è sufficiente fare clic con il pulsante destro del mouse in Esplora risorse e selezionare Disinstalla .
  • Puoi anche disinstallarlo tramite la riga di comando come spiegato nella sezione 3.

2. Utilizzo dell’applet ARP (Aggiungi / Rimuovi programmi)

  • Devo solo menzionare l’approccio normale anche se è ovvio
  • Vai start esegui appwiz.cpl INVIO per aprire l’applet aggiungi / rimuovi programmi (oppure fai clic su aggiungi / rimuovi programmi nel pannello di controllo)
  • Fare clic su ” Rimuovi ” per il prodotto che si desidera disinstallare.

3. Utilizzo della riga di comando msiexec.exe (direttamente o tramite un file batch)

  • È ansible eseguire la disinstallazione tramite il prompt dei comandi ( cmd.exe ), il file batch o anche all’interno di un eseguibile come operazione di shell .
  • A tale scopo, passare il GUID del prodotto (verificare in seguito come trovare questo GUID ) o il percorso del file MSI originale, se disponibile, su msiexec.exe .
  • Per tutte le righe di comando seguenti è ansible aggiungere /qn per eseguire la disinstallazione in modalità silenziosa . In questo modo viene eseguita una disinstallazione quando viene triggersta dall’applet di aggiunta / rimozione.

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

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

        msiexec.exe /x {11111111-1111-1111-1111-11111111111X} 
    • Opzione 3: Disinstallazione intertriggers 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 intertriggers con file di log dettagliato e arrossato ( verbose, opzione flush to log – registra continuamente il log, 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 continuamente anziché in lotti. Ciò garantisce che nessun buffer di log venga perso se l’installazione si interrompe.

      • In altre parole, abilita questa opzione se la tua installazione è in crash e non ci sono informazioni utili nel tuo file di log dettagliato . Rimuovi il punto esclamativo per distriggersre l’opzione flush to log e la disinstallazione sarà molto più veloce. Si ottiene ancora la registrazione dettagliata, ma come indicato alcuni buffer di log potrebbero andare persi.

    • Opzione 5 (consigliata): Disinstallazione invisibile all’utente con file di registro dettagliato: elimina i riavvii (non è necessario eseguire il flush per il log: vedere l’opzione precedente per il significato):

        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é raccomando 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 il prodotto guid: Come posso trovare il GUID del prodotto di una configurazione MSI installata? (per la disinstallazione se non si ha l’MSI originale da specificare nel comando di disinstallazione).

  • Suggerimento : se si crea un file di registro per la disinstallazione, è ansible individuare i problemi nel registro cercando “valore 3” . Questo è particolarmente utile per i file dettagliati, perché sono così, bene, prolissi :-).

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

    • Ci sono diversi modi, il mio modo consigliato è usare Powershell: Come posso trovare il GUID del prodotto di una configurazione MSI installata?
    • Diversi altri modi descritti qui (registro, cartella cache locale, ecc …): Trova GUID da file MSI
  • Ulteriori informazioni sulla registrazione da installsite.org : Come posso creare un file di registro della mia installazione ? – Ottima panoramica delle diverse opzioni e anche specifiche della registrazione InstallShield.

  • Msiexec (opzioni della riga di comando) : panoramica della riga di comando per msiexec.exe da MSDN . Ecco la versione di Technet .

4. Utilizzo del database MSI memorizzato nella cache nella cartella della cache super nascosta

  • MSI elimina tutte le cabine (versioni precedenti di Windows) e memorizza nella cache ogni MSI installato in una cartella di sistema nascosta in % SystemRoot% \ Installer (è necessario mostrare i file nascosti per vederlo).
  • NB : questa cartella supper-hidden viene ora trattata in modo diverso in Windows 7 in poi. I file MSI ora sono memorizzati nella cache a schermo intero . Leggi il thread collegato per maggiori dettagli – lettura consigliata per chiunque trovi questa risposta e giochi con pericolose impostazioni di Windows.
  • Tutti i file MSI qui avranno un nome casuale (formato hex) assegnato, ma è ansible ottenere informazioni su ciascun MSI mostrando la barra di stato di Windows Explorer (Visualizza -> Barra di stato) e quindi selezionando un MSI. Lo stream di riepilogo dal MSI sarà visibile nella parte inferiore della finestra di Windows Explorer. O come sottolinea Christopher Galpin, triggers la colonna “Commenti” in Windows Explorer e seleziona il file MSI ( leggi questo articolo per sapere come fare ).
  • Una volta trovato il giusto MSI, basta fare clic con il tasto destro del mouse e andare su Disinstalla.
  • È inoltre ansible utilizzare PowerShell per mostrare il percorso completo del pacchetto memorizzato nella cache locale insieme al nome del prodotto. Questa è l’opzione più semplice a mio avviso.
  • Per triggersre PowerShell : tenere premuto il tasto Windows, toccare R, rilasciare il tasto Windows, digitare “powershell” e premere OK . Quindi ottimizzare la finestra di PowerShell ed eseguire il comando seguente:
  get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize 

Inserisci qui la descrizione dell'immagine

  • Vedi anche questa risposta: Come posso trovare il GUID del prodotto di una configurazione MSI installata?

5. Utilizzo di PowerShell

  • È disponibile uno script PowerShell simile ma più completo disponibile su MSDN . Permette 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 class WMI Win32_Product attiverà una verifica della coerenza del software che è molto lenta e in circostanze particolari può causare l’triggerszione di un’autoriparazione MSI. Vedi questo articolo: Powershell Uninstall Script – Avere un vero mal di testa

  • Non l’ho provato da solo, ma sembra $ app.Uninstall () può eseguire UninstallString registrato nelle impostazioni del registro dell’applet ARP. Ciò significa che in alcuni casi potrebbe essere eseguita la modifica anziché la disinstallazione.
  • Controlla questo argomento per ulteriori dettagli e modi per disinstallare tramite Powershell: Come posso disinstallare un’applicazione usando PowerShell?

6. Utilizzo della libreria di classi .NET DTF (parte del toolkit WiX )

  • Questa opzione è inclusa per gli sviluppatori che entrano nella distribuzione e MSI – non è davvero pratico come una “soluzione rapida”. È necessario scaricare il toolkit WiX , un framework gratuito per la creazione di file MSI compilati da file di origine XML.
  • Un rapido aggiornamento su WiX e la sua “storia”: Windows Installer e la creazione di WiX . E qui WiX è in contrasto con altri strumenti di distribuzione (commerciali) – (punti di forza e punti deboli – auspicabilmente il più objective ansible).
  • DTF (Deployment Tools Foundation) è distribuito come parte di WiX come spiegato qui: È disponibile il codice sorgente per Deployment Tools Foundation? .
  • DTF è essenzialmente un wrapper .NET per l’API di Windows Installer Win32 . Elimina tutte le necessità di COM Interop quando si lavora con Windows Installer tramite l’automazione e non è altro che un gioiello .NET , forse la libreria .NET più semplice da usare che abbia mai visto. Altamente raccomandato: ottimo anche per gli studenti di formazione in C # .
  • La seguente fonte dell’esperto MSI Christopher Painter che utilizza C # e DTF. Microsoft.Deployment.WindowsInstaller è uno degli assembly DTF. Vedi gli altri assembly spiegati qui su serverfault.com :
  using Microsoft.Deployment.WindowsInstaller; public static void Uninstall( string productCode) { Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\""); } 
  • Un’altra alternativa di Tom Blodget: verifica della corretta disinstallazione
  • Maggiori informazioni su msiexec.exe rispetto all’automazione su: serverfault.com .

7. Utilizzo dell’API di automazione di Windows Installer

  • Ecco una discussione della comunità su questa opzione: esempio di comunità dell’API di automazione di Windows Installer
  • È ansible accedere all’API tramite l’ automazione degli script e le chiamate all’API C ++ (il mio post su serverfault.com)
  • La seguente fonte adattata dall’esperto MSI Christopher Painter utilizzando VBScript :

     Set installer = CreateObject("WindowsInstaller.Installer") installer.InstallProduct "product.msi", "REMOVE=ALL REBOOT=ReallySuppress" Set installer = Nothing 
  • Ecco un altro VBScript per la disinstallazione di GUID da Symantec: http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry

  • Disinstallare tramite codice di aggiornamento e ConfigureProduct .


8. Utilizzo di un aggiornamento principale di Windows Installer

  • Un importante aggiornamento di Windows Installer può avvenire come parte dell’installazione di un altro file MSI.
  • Un importante aggiornamento è stato creato identificando i prodotti correlati nella ” Tabella degli aggiornamenti ” di MSI. Queste impostazioni correlate vengono quindi gestite come specificato nella tabella. In genere ciò significa che sono stati disinstallati, ma l’impostazione principale può anche essere annullata (in genere utilizzata per rilevare versioni più elevate della propria applicazione presenti sulla confezione).

9. Utilizzo di un sistema di distribuzione avanzato / Sistema di amministrazione remota

  • SCCM , CA Unicenter , IBM Tivoli , Altiris Client Management Suite e molti altri
  • Questi strumenti sono dotati di una gestione avanzata del PC client e questo include l’installazione e la disinstallazione dei file MSI
  • Questi strumenti sembrano utilizzare una combinazione di msiexec.exe, automazione, WMI , ecc. E persino il proprio modo di richiamare installazioni e disinstallazioni.
  • Nella mia esperienza questi strumenti hanno un sacco di “personalità” e devi adattarti ai loro diversi modi di fare le cose.

10. Utilizzo di WMI – Strumentazione gestione Windows

  • Aggiungendo solo per completezza. Non è consigliabile utilizzare questo approccio poiché è molto lento
    • Un controllo di coerenza del software viene triggersto ogni volta che viene richiamato Win32_Product di ogni installazione
    • Il controllo di coerenza è incredibilmente lento e può anche innescare una riparazione del software . Vedi questo articolo: Powershell Uninstall Script – Avere un vero mal di testa
    • Ancora peggio, alcune persone segnalano i loro registri eventi che si riempiono con le voci 1035 EventID MsiInstaller , apparentemente causate da query WMI alla class Win32_Product (personalmente non l’ho mai visto).
  • Lo strumento di creazione del codice WMICodeCreator.exe può essere utilizzato per sperimentare
    • L’installazione può essere invocata tramite Win32_Product.Install
    • La disinstallazione può essere richiamata tramite Win32_Product.Uninstall
  • Esempio MSDN: metodo di disinstallazione della class Win32_Product

11. Utilizzo di uno strumento di terze parti come ccleaner o simili

  • Diverse applicazioni Windows dispongono di una propria interfaccia per disinstallare non solo pacchetti MSI, ma anche programmi di installazione legacy.
  • Qui non voglio fare raccomandazioni sugli strumenti specifici (specialmente quelli commerciali), ma il noto CCleaner presenta un’interfaccia di disinstallazione (e ha una versione gratuita). Dovrei anche aggiungere che questo strumento ha subito un attacco di malware di recente .
  • Suppongo che dovremmo ricordare tutti che anche software innocuo può essere iniettato con malware nelle loro posizioni di download (attacco FTP).
    • Io uso virustotal.com per controllare i miei download, e anche Sysinternals Process Explorer per controllare i processi in esecuzione dopo l’installazione – insieme al normale software di sicurezza (qualunque sia disponibile).
    • Una quantità sorprendente di software “area grigia” si trova di solito con questo approccio (barre degli strumenti, emoticon, adware, ecc.), Insieme a diversi falsi positivi (possono anche causare problemi in quanto il software di sicurezza ne blocca l’accesso o li mette in quarantena sacco di fuzz). E sicuramente anche malware reale.
    • Alcuni suggerimenti per l’uso di Process Explorer possono essere trovati qui : una serie di tweet: questo strumento Process Explorer si collega a VirusTotal.com per controllare tutti i processi in esecuzione in modo interattivo: tutto ciò di cui hai bisogno sono alcuni passaggi di configurazione.
    • Dovrei notare che Process Explorer produce un controllo delle firme 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 segnalati). È necessario uno strumento di sicurezza regolare per la protezione euristica online intertriggers.
    • Per quello che vale, penso che alcuni software di sicurezza finiscano per causare più problemi falsi positivi di quelli dannosi. Famose ultime parole nell’era del riscatto …
    • Si tratta di una digressione abbastanza ampia: non voglio che le persone scarichino malware. Controlla almeno il tuo account su virustotal.com .
  • La disinstallazione come questa dovrebbe funzionare correttamente. Penso che questi strumenti rovinino troppe cose quando si provano le loro “funzionalità di pulizia”. Usare con caucanvas. Se usi solo la funzione di disinstallazione, dovresti essere OK.

12. Utilizzando uno strumento di pulizia come msizap o simili

  • Per completezza Msizap.exe dovrebbe essere menzionato anche se è deprecato , non supportato e obsoleto . Non dovrebbe essere usato 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.
  • L’uso previsto di questi strumenti era quello di eliminare disinstallazioni non riuscite :
    • Generalmente per il raro caso in cui l’MSI memorizzato nella cache con il nome casuale è erroneamente mancante e la disinstallazione non riesce per questo motivo mentre si richiede l’MSI originale
      • Questo è un problema raro, ma l’ho visto da solo. Solo alcune potenziali cause:
        • Interferenze con il ripristino del sistema ? Il ripristino di un’immagine di sistema precedente cancella accidentalmente un file MSI memorizzato nella cache?
        • Applicazioni di pulizia mal progettate che eliminano ciò che non dovrebbero?
        • Problemi di progettazione di MSI o crash in msiexec.exe verso la fine dell’installazione durante la registrazione del prodotto finale? Lo trovo improbabile dal momento che il caching è stato fatto prima di avviare l’installazione, ma ho visto problemi come questo durante lo sviluppo di file MSI.
        • Un’improvvisa interruzione di corrente ? Anche un po ‘improbabile a causa della protezione integrata in Windows Installer, ma un’improvvisa interruzione dell’alimentazione può sempre causare risultati imprevisti.
        • Anti-virus o altro software di sicurezza che cancella o blocca l’accesso al file MSI memorizzato nella cache?
        • Se si sta sviluppando un MSI e si continua a reinstallare il test, è ansible triggersre questo problema riutilizzando lo stesso codice pacchetto tra build (MSI tratta file MSI diversi come lo stesso file per definizione se il codice pacchetto è lo stesso – tutti i tipi di problemi strani risultano) . Questo è un caso molto particolare generalmente visto solo sui computer utilizzati per lo sviluppo o QA.
        • L’utente o l’amministratore eliminano manualmente i file MSI dalla cartella cache per salvare o creare lo spazio disponibile su disco o semplicemente per armeggiare con le impostazioni di Windows. La cartella è “super nascosta” e di difficile accesso, ma è ancora ansible trovarla ed eliminare i file da essa.
        • Ci sono certamente altre possibili cause, ma l’elenco è già diventato troppo lungo e ingombrante.
    • Anche per altri tipi di disinstallazioni non riuscite
    • Potrebbe anche essere usato per zappare qualsiasi installazione MSI, anche se ovviamente non è consigliabile.
    • Ulteriori informazioni: Perché MSI richiede il file .msi originale per procedere con una disinstallazione?
  • Questo nuovo strumento di supporto (questo strumento è ora anche deprecato) può essere provato su versioni di Windows recenti se si dispone di pacchetti MSI defunti che richiedono la disinstallazione.
  • Alcuni hanno suggerito di utilizzare lo strumento collegato qui da saschabeaumont: Disinstalla senza un file MSI . Se lo provi e funziona, assicurati di farcelo sapere.
  • Se si ha accesso al MSI originale effettivamente utilizzato per installare il prodotto, è ansible utilizzarlo per eseguire la disinstallazione. Deve essere l’MSI esatto utilizzato e non solo uno simile.

13. Utilizzo del ripristino del sistema (“installazione annulla” – ultimo ricorso IMHO)

  • Questo non è assolutamente un modo per ” disinstallare ” ma per ” annullare ” l’ultima installazione o diverse installazioni.
  • Il ripristino tramite un punto di ripristino riporta il sistema a uno stato di installazione precedente (puoi trovare demo video su YouTube o su un sito simile).
  • Si noti che la funzione può essere distriggersta completamente o in parte – è ansible disabilitare in modo permanente per l’intera macchina o ad hoc per installazione.
  • Ho visto nuovi, irrisolvibili problemi di installazione derivanti da un ripristino del sistema, ma normalmente funziona correttamente . Ovviamente non usare la funzione per divertimento. È l’ultima risorsa e viene utilizzato al meglio per il rollback di nuovi driver o configurazioni appena installate che possono causare problemi immediati ( schermo blu , riavvii, instabilità, ecc …).
  • Più a lungo torni indietro più rielaborazioni creerai per te stesso e più alto sarà il rischio. La maggior parte dei sistemi presenta solo pochi punti di ripristino e la maggior parte di essi si allunga indietro di un mese o due credo.
  • Tieni presente che il ripristino del sistema potrebbe influire sugli aggiornamenti di Windows che devono essere riapplicati, oltre a molte altre impostazioni di sistema. Oltre ai semplici fastidi, questo può anche far riemergere problemi di sicurezza e si potrebbe voler eseguire un controllo di sicurezza specifico sui box di destinazione usando Microsoft Baseline Security Analyzer o strumenti simili.
  • Poiché ho menzionato il ripristino del sistema, suppongo di dover menzionare la funzionalità Ultima configurazione sicuramente funzionante . Questa funzione 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 generato un sistema in esecuzione. Può essere utilizzato per riavviare il sistema se si blocca o si blocca durante l’avvio. Questo succede spesso dopo l’installazione del driver.

14. Funzioni di Windows Installer (C ++)

Per completezza suppongo che dovremmo menzionare il nucleo di tutto questo – il modo down-to-the-metal: le funzioni dell’API di Windows Installer Win32 . Queste sono probabilmente le funzioni utilizzate dalla maggior parte, se non tutti gli altri approcci elencati sopra “sotto il cofano”. Sono principalmente utilizzati da applicazioni o soluzioni che si occupano direttamente di MSI come tecnologia.

C’è una risposta su serverfault.com che può essere di interesse come un sumrio dei diversi approcci programmatici per la disinstallazione (COM Automation, .NET, Win32 installer functions).

Di seguito è riportato uno snippet C ++ che mostra come disinstallare Orca, 10.1.15063.468 per codice prodotto utilizzando una chiamata alla funzione MsiConfigureProductEx . Per disinstallare un altro prodotto, sostituire il GUID specificato per prodcode con quello del prodotto. Per trovare il codice prodotto, vedere questa risposta: Come posso trovare il GUID del prodotto di un’installazione MSI installata?

La disinstallazione avverrà in modalità GUI completa. Per eseguire in modalità silenziosa o un’altra modalità GUI (ridotta, di base, ecc.), Vedere la funzione : MsiSetInternalUI .

 #include "stdafx.h" // The below should really be in stdafx.h (precompiled header) #define WIN32_LEAN_AND_MEAN // Exclude stuff from Windows.h #include  #include  // Windows Installer #pragma comment(lib, "msi.lib") // To make code link int main() { const TCHAR noreboot[] = _T("REBOOT=ReallySuppress"); const TCHAR prodcode[39] = _T("{EC910170-2D07-6B84-9865-1719173EE261}"); // Orca, 10.1.15063.468 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 creato e testato con Visual Studio 2017 :

  1. Creare una nuova “Applicazione console Windows” da Visual C ++ => Windows Desktop.
  2. Copia e incolla il codice sopra nel tuo file CPP principale (sostituendo qualunque cosa ci sia).
  3. Dovrebbe essere in grado di eseguire il codice. Forse imposta un breakpoint, costruisci ed esegui.

    • Fate attenzione alle modifiche ai modelli predefiniti in VS2017 e agli errori strani che possono risultare: Vi sono troppi errori per il corretto funzionamento del motore IntelliSense .
    • Il collegamento MSDN nel codice elenca i possibili messaggi di errore restituiti da msiexec.exe.

Ricorda inoltre che una disinstallazione può essere avviata usando il comando WMIC:

wmic product get name -> Questo elencherà i nomi di tutte le app installate

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

L’estensione del file msi è mappata su msiexec (nello stesso modo, digitando un nome file .txt su un prompt dei comandi, viene lanciato il gestore di file Notepad / default .txt per visualizzare il file).

Pertanto, digitando un nome file con estensione .msi, viene eseguito veramente msiexec con il file MSI come argomento e viene eseguita l’azione predefinita, installazione. Per questo motivo, la disinstallazione richiede di richiamare msiexec con l’interruttore di disinstallazione per installarlo.

 wmic product get name 

Basta che il cmd sia bloccato … continua a lampeggiare _ dopo un paio di minuti

in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall , se è ansible trovare la cartella con il nome del software che si sta tentando di installare (non quello con ProductCode), UninstallString punta al programma di disinstallazione C:\Program Files\Zune\ZuneSetup.exe /x

Vorrei provare la seguente syntax: funziona per me.

 msiexec /x filename.msi /q 

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