Domanda

Ho costruire un programma di installazione MSI utilizzando un progetto di installazione VS2010.

Ora il progetto non lo fa disinstallare a causa di un "1001 Eccezione: formato non valido per l'argomento machineName". (Vedi sotto) all'interno di un'azione personalizzata

Sono unsucessful a disinstallare l'applicazione che utilizza la rimozione dal controllo del sistema o msiexec /uninstall.

C'è un modo per forzare la disinstallazione?

dettagli:

Nell'ambito di un'azione personalizzata a registrare una sorgente di evento personalizzato che i miei usi app per loging evento in finestre log:

public override void Install(IDictionary stateSaver) {  
        base.Install(stateSaver);  
        EventLog.CreateEventSource("VeodinRecorder","Application");  
}  

all'interno del "Disinstalla" Io cerco di rimuovere questo EventSource con

if (!EventLog.SourceExists("VeodinRecorder"))  
   EventLog.Delete("VeodinRecorder"); `

L'EventLog.Delete prende anche nomemacchina come secondo argomento Così ho cercato di sovrascrivere il msi utilizzato per la disinstallazione con msiexec /fv e ha cambiato l'azione di disinstallazione:

   EventLog.Delete("VeodinRecorder","."); 
   EventLog.Delete("VeodinRecorder","Application"); 

Ho anche lasciato tutto vuoto "azione di disinstallazione".

Ma niente sembrava funzionare.

alcun suggerimento?

Il registro completo:

Errore 1001. Errore 1001. Un'eccezione durante la disinstallazione. Questa eccezione verrà ignorata e la disinstallazione continuerà. Tuttavia, l'applicazione potrebbe non essere completamente disinstallato dopo la disinstallazione è completa. -> formato valido per l'argomento machineName. MSI (s) (60 68!) [22: 49: 00: 101]:
DEBUG: Errore 2769: azione personalizzata _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall non si chiudeva 1 MSIHANDLEs
. Il programma di installazione ha rilevato un errore imprevisto l'installazione di questo pacchetto. Ciò può indicare un problema con questo pacchetto. Il codice di errore è 2769. Gli argomenti sono: _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall, 1, CustomAction _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall ha restituito il codice di errore effettivo 1603 (notare che questo non può essere accurato al 100% se la traduzione è accaduto sandbox all'interno)
L'azione ha terminato 22:49:00: InstallExecute. Restituisce il valore 3.
Fine operazione 22:49:00: INSTALLA. Return Value 3.

È stato utile?

Soluzione

Sembra che il CustomAction.dll non è stato aggiornato quando aggiorno l'installazione con msiexec /fv.

Ora posizionato manualmente la nuova costruzione CustomAction.dll (con un override di disinstallazione vuoto) nella cartella di installazione ed è stato in grado di disinstallare.

Aggiornamento:. (crediti verso @pcans) uso ORCA per modificare il msi attualmente installata e manualmente disabilitare l'azione personalizzata di disinstallazione

Altri suggerimenti

Proprio per riferimento Voglio aggiungere che si può anche patchare il prodotto installato con aggiornamento minore per rimuovere eventuali azioni difettosi nel sequenza di disinstallazione prima che venga chiamato. Questo funziona perché un aggiornamento minore è una reinstallazione dello stesso prodotto, e non una disinstallazione e una reinstallazione di una nuova versione (che è un importante aggiornamento). È quindi sostituire la sequenza di disinstallazione con una corretta prima di quello difettoso: viene eseguito.

La creazione della patch è piuttosto complicato, però, anche con strumenti professionali come il Saggio o InstallShield, ma in alcuni casi questo è l'unica correzione che lavora per ottenere il pacchetto correttamente disinstallato. Un pacchetto "in the wild" in una società dovrebbe essere fissato in questo modo.

Infine è possibile utilizzare msizap.exe da Microsoft per annullare la registrazione di un pacchetto difettosa intero dal database di Windows Installer, ma questo non è un bene dal momento che le modifiche al sistema non vengono annullate a tutti e un sacco di spazzatura viene lasciata in tutto il mondo. Lo strumento in sé sembra anche un po 'traballante, a volte, a volte creando nuovi errori che sono veramente difficili da risolvere. Preferibilmente usarlo per debug solo .

Un altro nota in questa già lunga risposta: un caso speciale è quando si esegue un'azione personalizzata solo durante la sequenza di disinstallazione, e quindi restituisce un codice di ritorno difettosa - a volte anche se ha effettuato il operazioni ok. Queste azioni possono innescare un annonying " disinstallazione unica situazione di rollback ". Efficace il vostro disinstallazione è il rollback quando colpisce l'azione personalizzata che non fu mai eseguito durante l'installazione. Ciò rollback la disinstallazione e quindi il lavoro come installazione - il prodotto viene lasciato sulla macchina. Piuttosto strano.

La linea di fondo :. Ignorare i codici di ritorno per le azioni personalizzate che vengono eseguite durante la disinstallazione, utilizzare altri meccanismi di verifica per garantire l'azione è riuscita

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