2016-11-14 6 views
0

Ich weiß nicht, warum die Rollback-Aktion nicht im Upgrade-Prozess arbeiten, aber es im Installationsprozess arbeiten, habe ich fast alle Methoden, die ich in der Google gefunden habe versucht, ich hoffe ich kann Finden Sie die Antwort hier, also meine Frage ist: 1.Wir müssen zwei benutzerdefinierte Aktion definieren? Einer ist zurückgestellt, ein anderer ist Rollback, und Rollback muss vor dem Zurückgestellt sein? aber meine Rollback-Aktion möchte nur den Dienst neu starten, wenn das Upgrade fehlschlagen, so ist es notwendig, dies zu tun, und ich habe diese Methode versucht, es funktioniert nicht, aber es funktioniert in der Installation, die ich gerade eine Rollback-Aktion definiert sehen können, wie die Folge :(Rollback-Aktion ist zwischen in InstallInitialize und InstallFinalize)Wix Rollback benutzerdefinierte Aktion funktioniert nicht in Upgrade abbrechen

1.in InstallExecuteSequence

<Custom Action="StartAllServicesWhenRollBack" After="InstallInitialize">1</Custom> 
    <Custom Action="UninstallMysqlOdbcDriver" After="StartAllServicesWhenRollBack">1</Custom> 

2.in Fragment

<CustomAction Id="StartAllServicesWhenRollBack" BinaryKey="StartAllServicesWhenRollBackScript" VBScriptCall="" Execute="rollback" Return="check"/> 
<Binary Id="StartAllServicesWhenRollBackScript" SourceFile="startInstall.vbs" /> 
<CustomAction Id="UninstallMysqlOdbcDriver" BinaryKey="UninstallMysqlOdbcDriverScript" VBScriptCall="" Execute="immediate" Return="check"/> 
<Binary Id="UninstallMysqlOdbcDriverScript" SourceFile="UninstallMysqlOdbcDriver.vbs" /> 

es im Installationsrollback, aber nicht in Upgrade arbeiten, eine andere Methode ist:

<Custom Action="StartAllServicesWhenRollBack" Before="StopAllServicesa">1</Custom> 
    <Custom Action="StopAllServicesa" After="InstallInitialize">1</Custom> 

    <CustomAction Id="StartAllServicesWhenRollBack" BinaryKey="StartAllServicesWhenRollBackScript" VBScriptCall="" Execute="rollback" Return="check"/> 
<Binary Id="StartAllServicesWhenRollBackScript" SourceFile="startInstall.vbs" /> 
<CustomAction Id="StopAllServicesa" BinaryKey="StopAllServicesaScript" VBScriptCall="" Execute="deferred" Return="check"/> 
<Binary Id="StopAllServicesaScript" SourceFile="stopService.vbs" /> 

diese Methode nicht in Upgrade arbeiten, also im darüber zu verwirren, wird die StopAllServicesa auszuführen, aber Rollback-Aktion ausführen tut, wie es scheint Die Rollback-Aktion wurde nicht im Rollback-Skript geschrieben. Wie finde ich das Rollback-Skript im Protokoll?

+0

Möglicherweise müssen Sie die Frage klären. Ein wichtiges Upgrade ist eine Installation und Deinstallation. Sie haben nicht angegeben, wo Ihr Upgrade geplant ist. Sie haben auch nicht angegeben, wo der Aktualisierungsfehler auftritt, da die Aktualisierungsinstallation selbst fehlschlagen kann, bevor das ältere Produkt bei der RemoveExistingProducts-Aktion entfernt wird, oder die Deinstallation des älteren Produkts fehlschlagen und sich selbst neu installieren und das Upgrade zurücksetzen kann. Das Rollback-Skript befindet sich nicht im Protokoll, aber ein vollständiges ausführliches Protokoll des gesamten Upgrades enthält die Informationen trotzdem, da es sich um ein Protokoll der Skriptaktionen handelt. – PhilDW

+0

OK, THX, es ist ein wichtiges Upgrade, weil das Major-Upgrade das ältere Produkt deinstallieren wird, so dass meine Rollback-Aktion in der neuen Version funktionieren sollte, ist das richtig, was bedeutet, dass ein Upgrade zwei Stufen hat, wenn ich auf Abbrechen klicke Button bei der Deinstallation der alten Versionsphase, meine Rollback-Aktion funktioniert nicht, weil das ältere Produkt keine Rollback-Aktion hat, aber wenn ich bei der Installation der neuen Version stoppe, wird meine Rollback-Aktion funktionieren, also das ist mein Testergebnis, also was ich gesagt habe, ist richtig ? Das ist mein Verständnis..ich weiß nicht richtig oder falsch .. –

+0

Sie haben immer noch nicht gesagt, wo Ihr Haupt-Upgrade sequenziert wird, das macht einen Unterschied. Das Haupt-Upgrade findet während der einzelnen Fortschrittsleiste statt (vorausgesetzt, Sie führen ein normales Upgrade durch). Sind Sie also sicher, dass Sie wissen, welche Phase des Upgrades abgebrochen wird? – PhilDW

Antwort

0

Wenn ein Produkt installiert wird, gibt es die Rollback-Funktion, sodass benutzerdefinierte Aktionen alle Änderungen rückgängig machen können, die sie am System vorgenommen haben. Es gibt nicht wirklich eine "Deinstallation Rollback". Wenn ein Produkt deinstalliert wird und auf irgendeine Weise ausfällt, wird das Produkt einfach durch "Rollback" neu installiert. In diesem Fall ist kein spezielles Rollback erforderlich. Wenn RemoveExistingProducts fehlschlägt, wird die Deinstallation einfach rückgängig gemacht, indem das Produkt erneut installiert wird.

Ohne das vollständige ausführliche Protokoll zu sehen, ist es unmöglich, genau zu diagnostizieren, was vor sich geht, aber der "neues Produkt installieren" Teil eines Upgrades schlägt fehl, dann rollt die Installation zurück und ruft alle erforderlichen Rollback-CAs auf. Es unterscheidet sich nicht von dem Benutzer, der eine Deinstallation abbricht - Windows installiert das Produkt einfach neu und benötigt nicht so etwas wie "Rollback-Aktionen zurücksetzen", damit es funktioniert.

+0

THX erneut, Es ist also nicht nötig, eine Rollback-Aktion hinzuzufügen, weil das Produkt w Ill neu installieren, und ich sollte herausfinden, warum der Service nicht starten, ich möchte auch bestätigen, dass die Rollback-Aktion in meinem Protokoll alle zum neuen Produkt gehören? Vor der Erklärung denke ich, dass ein Teil der Rollback-Aktion zur Deinstallationsphase gehört. Außerdem funktioniert meine Rollback-Aktion für Neustart, wenn ich meinen MajorUpgrade-Zeitplan in afterInstallExecute ändere, was zuerst ein neues Produkt installiert und nach InstallFinalize deinstalliert, falls ein Fehler auftritt vor InstallFinalize wird das alte Produkt neu installiert? –

Verwandte Themen