2010-12-30 6 views
1

Ich versuche ein MSI-Projekt zu erstellen, und während der Installation installiere ich einen Windows-Dienst. Wenn dieser Dienst nicht installiert werden kann, möchte ich ein Rollback initiieren und die Installation abbrechen.Wie kann ich ein MSI-Projekt in C# zurücksetzen oder abbrechen?

Ich habe bereits eine Installer Klasse und außer Kraft gesetzt, die Installation und Deinstallation Methode gebaut. Wie kann ich ein Rollback initiieren?

+0

Ort, wo ich von den Rollback initiieren wollen? ist das von einer benutzerdefinierten Aktion? –

+0

Ja, ich habe eine Installer-Klasse, die dem Installationsprozess in der benutzerdefinierten Aktion hinzugefügt wurde, und installiere einen Windows-Dienst, falls diese Installation fehlschlägt. Ich möchte, dass die gesamte Installation fehlschlägt und alle Dateien gelöscht werden. – guyl

+0

Versuchen 1602 aus Ihrer benutzerdefinierten Aktion Rückkehr: http://msdn.microsoft.com/en-us/library/aa369778(VS.85).aspx –

Antwort

1

Zuerst sollten Sie wissen, dass InstallUtil benutzerdefinierte Aktionen verwenden (unabhängig davon, wie dokumentiert und geschrieben über sie sind) sind keine gute Wahl. Werf sie weg. Dasselbe gilt für das Visual Studio-Bereitstellungsprojekt, das Sie verwenden, um Ihre benutzerdefinierte Aktion zu konsumieren.

Die beste Lösung liegt in der Nutzung von Windows Installer eine integrierte Unterstützung für die Erstellung und Dienste zu starten. Verwenden Sie InstallShield 2010 Limited Edition (kostenlos) oder Windows Installer XML (FOSS). Diese Werkzeuge, die Servicecontrol Tabelle belichten, die eine Wait Spalte hat, die Sie MSI lehren ermöglicht:

Warten
Verlassen dieses Feld null oder Eingabe ein Wert von 1 bewirkt, dass der Installateur ein Maximum von 30 warten, Sekunden für den Dienst zu vervollständigen bevor Sie fortfahren. Die Wartezeit kann verwendet werden, zusätzliche Zeit, um für ein kritische Ereignis eines Ausfall Fehler zurückzukehren. Ein Wert von 0 in diesem Feld bedeutet, dass nur gewartet wird, bis der Dienst Control Manager (SCM) meldet, dass dieser Dienst in einem ausstehenden Status ist, bevor Sie mit der Installation fortfahren.

ServiceControl Table

+0

Es scheint, ich bin falsch in der Annahme, 2010 LE unterstützt die Servicecontrol/Serviceinstall-Tabellen. Eine Umgehung wäre die Verwendung von WiX, um ein Mergemodul mit einem Service zu erstellen und dann das Mergemodul in der InstallShield-Tabelle zu verwenden. –

+0

Hinweis: Der kürzlich veröffentlichte ISLE für VS2013 unterstützt jetzt ServiceInstall/ServiceControl. –

Verwandte Themen