Frage

Ich habe ein MSI -Installateur mit einem VS2010 -Setup -Projekt erstellt.

Jetzt entschlüsselt das Projekt aufgrund eines "1001 -Ausnahme: Ungültiges Format für Argumentmaschinenname" (siehe unten) (siehe unten) in einer benutzerdefinierten Aktion.

Ich bin nicht erfolgreich darin, die Anwendung mit dem Entfernen der Systemsteuerung zu deinstallieren oder msiexec /uninstall.

Gibt es eine Möglichkeit, die Deinstallation zu zwingen?

Einzelheiten:

Als Teil einer benutzerdefinierten Aktion registriere ich eine benutzerdefinierte Ereignisquelle, die meine App für das Ereignisanlagen im Windows -Protokoll verwendet:

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

Innerhalb des "Deinstallierens" versuche ich, diese Eventsource zu entfernen

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

Der EventLog.delete nimmt auch Maschinename als zweites Argument msiexec /fv und veränderte die Deinstallation Aktion:

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

Ich habe sogar die gesamte "Deinstallation Action" leer gelassen.

Aber nichts schien zu funktionieren.

Irgendwelche Hinweise?

Das vollständige Protokoll:

Fehler 1001. Fehler 1001. Eine Ausnahme trat beim Deinstallieren auf. Diese Ausnahme wird ignoriert und die Deinstallation wird fortgesetzt. Die Anwendung ist jedoch möglicherweise nicht vollständig deinstalliert, nachdem die Deinstallation abgeschlossen ist. -> Ungültiges Format für Argumentmaschinenname. MSI (S) (60! 68) [22: 49: 00: 101]:
Debug: Fehler 2769: Benutzerdefinierte Aktion _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall hat 1 MSIhandles nicht geschlossen.
Der Installateur hat einen unerwarteten Fehler aufgetreten, der dieses Paket installiert. Dies kann ein Problem mit diesem Paket anzeigen. Der Fehlercode ist 2769. Die Argumente sind: _3C1D0358_8969_4b01_b8fa_b6b43f4e9e4c.uninstall, 1, CustomAction _3C1D0358_8969_4b01_b8fa_b6b43f43f43f43f43f4.
Aktion endete 22:49:00: InstalleTeLecute. Rückgabewert 3.
Aktion endete 22:49:00: Installation. Rückgabewert 3.

War es hilfreich?

Lösung

Es scheint, dass die CustomAction.dll nicht aktualisiert wurde, wenn ich die Installation mit der Installation aktualisiere msiexec /fv.

Ich habe jetzt die neu erstellte CustomAction (mit einer leeren Deinstallation Override) in den Installationsordner manuell platziert und konnte deinstallieren.

Aktualisieren: (Credits an @Pcans) Verwenden Sie ORCA, um die aktuell installierte MSI zu bearbeiten und die benutzerdefinierte Deinstallation manuell zu deaktivieren.

Andere Tipps

Gerade als Referenz Ich möchte hinzufügen, dass Sie auch können Patch das installierte Produkt mit einer Kleiner Upgrade Um fehlerhafte Aktionen in der Deinstallationsequenz zu entfernen, bevor sie aufgerufen wird. Dies funktioniert, da ein kleines Upgrade eine Neuinstallation desselben Produkts ist und keine Deinstallation und eine Neuinstallation einer neuen Version (ein großes Upgrade). Sie ersetzen daher die Deinstallationsequenz durch eine korrekte, bevor der irrtümlich ausgeführt wird.

Das Erstellen des Patchs ist jedoch ziemlich kompliziert, selbst bei professionellen Tools wie Wise oder InstallShield, aber in bestimmten Fällen ist dies die einzige Behebung, die das Paket ordnungsgemäß nicht staltet. Ein Paket "in freier Wildbahn" in einem Unternehmen sollte auf diese Weise repariert werden.

Endlich kannst du benutzen MSizap.exe Von Microsoft bis hin zu einem ganzen fehlerhaften Paket aus der Windows Installer -Datenbank ist dies jedoch nicht gut, da Änderungen am System überhaupt nicht zurückgerollt werden und viel Müll überall übrig bleibt. Das Werkzeug selbst scheint manchmal auch etwas wackelig zu sein und manchmal neue Fehler zu erzeugen, die wirklich schwer zu beheben sind. Verwenden Sie es vorzugsweise für nur debuggen.

Eine weitere Anmerkung in dieser bereits langen Antwort: a besonderer Fall Wenn Sie eine benutzerdefinierte Aktion nur während der Deinstallationsequenz ausführen und dann einen fehlerhaften Rückgabecode zurückgibt - manchmal auch wenn er seine Vorgänge in Ordnung ausführte. Diese Aktionen können eine sehr Annonying auslösen "Nur eine Rollback -Situation deinstallieren". Effektiv wird Ihre Deinstallation zurückgerollt, wenn sie auf die benutzerdefinierte Aktion trifft, die während der Installation nie ausgeführt wurde. Dadurch wird die Deinstallation gerollt und daher als Installation funktioniert - Ihr Produkt bleibt auf der Maschine. Ziemlich seltsam.

Das Endergebnis: Überspringen Sie Rückgabecodes für benutzerdefinierte Aktionen, die während der Deinstallation ausgeführt werden, verwenden Sie andere Überprüfungsmechanismen, um sicherzustellen, dass die Aktion erfolgreich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top