如何在WiX中卸载期间显示对话框或消息框?

时间:2016-12-02 07:14:29

标签: wix

我试图在卸载过程中显示一个对话框或消息框(带有是或否按钮) 我需要在我的对话框中设置一个属性,用户可以选择(是(真)或否(假))。
此属性非常重要,因为如果用户的答案为"是"将删除所有文件。 我尝试在卸载时显示自定义对话框,但是没有用。自定义对话框没有给我一个错误。它甚至不会出现在详细日志中。

这是自定义对话框:

datetime yourdatetime = new datetime();
string converteddatetime = yourdatetime.toString("yyyy/MM/dd");

和InstallUISequence:

<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>

我试过After =&#34; MigrateFeatureStates&#34;在序列中,但也没有工作。
在另一个问题中,有人问Stopping display of custom dialog boxes in WiX uninstall这很有趣,因为所有其他问题都试图做到这一点。 我不想在自定义操作中执行此操作,因为我想阻止卸载进度并等待用户的回答。
有没有办法实现这个目标?
任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:4)

我在我们制作的SDK安装中完成了这一点。这个想法是,如果用户在SDK安装位置内进行了任何实际开发,一切都将被删除,我们希望确保他们保存他们真正需要的任何内容。

我没有为此警告框创建新对话框,因为消息框是所有Windows产品中定义明确且使用的概念。

在产品中,我添加了一个自定义操作,之后实际发生任何事情。

<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>

在我的自定义操作中,我有

[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;
}

在您的情况下,您可以使用messageboxbuttons.YesNo而不是OKCancel

在自定义操作中使用return="check",如果从自定义操作返回ActionResult.Failure,安装将停止。

我确实从wix bootstrapper启动了这个卸载,但行为应该是相同的。