我试图在卸载过程中显示一个对话框或消息框(带有是或否按钮)
我需要在我的对话框中设置一个属性,用户可以选择(是(真)或否(假))。
此属性非常重要,因为如果用户的答案为"是"将删除所有文件。
我尝试在卸载时显示自定义对话框,但是没有用。自定义对话框没有给我一个错误。它甚至不会出现在详细日志中。
这是自定义对话框:
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这很有趣,因为所有其他问题都试图做到这一点。
我不想在自定义操作中执行此操作,因为我想阻止卸载进度并等待用户的回答。
有没有办法实现这个目标?
任何帮助,将不胜感激。谢谢!
答案 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启动了这个卸载,但行为应该是相同的。