2016-12-02 3 views
1

Ich versuche, während der Deinstallation ein Dialogfeld oder ein Meldungsfeld (mit Ja oder Nein-Schaltflächen) anzuzeigen.
Ich muss eine Eigenschaft mit der Wahl des Benutzers aus meinem Dialog (Ja (wahr) oder Nein (falsch)) festlegen.
Diese Eigenschaft ist wichtig, da alle Dateien gelöscht werden, wenn die Antwort des Benutzers "Ja" lautet.
Ich habe versucht, einen benutzerdefinierten Dialog bei der Deinstallation anzuzeigen, und das hat nicht funktioniert. Benutzerdefinierte Dialog gab mir keinen Fehler. Es erscheint nicht einmal im ausführlichen Protokoll. HierWie zeigt man Dialog oder Message Box während der Deinstallation in WiX?

ist der Brauch Dialog:

<Dialog Id="ClearAllDataDlg" Width="260" Height="85" Title="[Setup] - [ProductName]" NoMinimize="yes"> 
    <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_No]"> 
     <Publish Property="CLEARALLDATA" Value="0" /> 
     <Publish Event="EndDialog" Value="Return">1</Publish> 
    </Control> 
    <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="[ButtonText_Yes]"> 
     <Publish Property="CLEARALLDATA" Value="1" /> 
     <Publish Event="EndDialog" Value="Exit">1</Publish> 
    </Control> 
    <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30"> 
     <Text>Do yo want to clear all data including your settings?</Text> 
    </Control> 
    <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" /> 
    </Dialog> 

und die InstallUISequence:

<Show Dialog="ClearAllDataDlg" Before="CostFinalize">REMOVE ~= "ALL"</Show> 

Ich versuchte Nach = "MigrateFeatureStates" in der Reihenfolge, aber das hat nicht funktioniert.
In einer anderen Frage fragte jemand Stopping display of custom dialog boxes in WiX uninstall das ist lustig, weil alle anderen Fragen versuchen, das Gegenteil zu tun.
Ich möchte dies nicht innerhalb einer benutzerdefinierten Aktion durchführen, da ich den Deinstallationsprozess blockieren und auf die Antwort des Benutzers warten möchte.
Gibt es eine Möglichkeit, dies zu erreichen?
Jede Hilfe wäre willkommen. Vielen Dank!

Antwort

2

Ich mache genau das in einer SDK-Installation, die wir produzieren. Die Idee ist, dass, wenn der Benutzer eine tatsächliche Entwicklung innerhalb des SDK-Installationsortes vorgenommen hat, alles gelöscht wird und wir sicherstellen wollen, dass sie alles speichern, was sie wirklich brauchen.

Ich habe keinen neuen Dialog für dieses Warnfeld erstellt, da ein Meldungsfeld ein sehr gut definiertes und verwendetes Konzept in allen Windows-Produkten ist.

Im Produkt habe ich eine benutzerdefinierte Aktion geplant vor alles tatsächlich passiert.

<CustomAction Id='CA_UninstallWarning' BinaryKey='SDKCustomActionsDLL' DllEntry='UninstallWarning' Execute='immediate' Return='check' /> 

<InstallExecuteSequence> 
    <Custom Action='CA_UninstallWarning' Before='FindRelatedProducts'>NOT UPGRADINGPRODUCTCODE AND REMOVE~="ALL"</Custom> 
    ... 
</InstallExecuteSequence> 

Und in meiner benutzerdefinierten Aktion Ich habe

[CustomAction] 
public static ActionResult UninstallWarning(Session session) 
{ 
    session.Log("Begin UninstallWarning."); 

    Record record = new Record(); 
    record.FormatString = session["WarningText"]; 

    MessageResult msgRes = session.Message(InstallMessage.Warning | (InstallMessage)System.Windows.Forms.MessageBoxButtons.OKCancel, record); 

    session.Log("End UninstallWarning."); 

    if (msgRes == MessageResult.OK) 
    { 
     return ActionResult.Success; 
    } 

    return ActionResult.Failure; 
} 

In Ihrem Fall können Sie messageboxbuttons.YesNo anstelle von OkCancel

Mit return="check" in Ihrer benutzerdefinierten Aktion, wird die Installation, wenn Sie aufhören Rückgabe ActionResult.Failure von der benutzerdefinierten Aktion.

Ich habe diese Deinstallation von einem Wix Bootstrapper starten, aber das Verhalten sollte das gleiche sein.

+2

Vielen Dank für Ihre Antwort. Ich habe es versucht und es hat funktioniert. Ich habe MessageBoxButtons.YesNo verwendet und die Eigenschaft je nach Benutzerauswahl festgelegt. Es kann den Fortschritt der Deinstallation blockieren und auf die Antwort warten, was erstaunlich ist. ** Hinweis: ** Wenn Sie ein C# Custom Action-Projekt verwenden, vergessen Sie nicht, die .CA.dll-Datei in der Binärtabelle in Product.wxs zu referenzieren. ** Noch ein Hinweis: ** Wenn Sie System.Windows.Forms verwenden, dann müssen Sie .NET Framework verwenden (Minimum unterstützte Version ist 1.0). Denken Sie also daran, dass dies ** NICHT ** auf einem Betriebssystem ohne .NET Framework ausgeführt wird . –

Verwandte Themen