Winforms 卸载时自定义windows窗体

Winforms 卸载时自定义windows窗体,winforms,installation,wix,windows-installer,custom-action,Winforms,Installation,Wix,Windows Installer,Custom Action,我想在卸载时显示我的自定义windows窗体。我将为此使用C#自定义操作。如何让自定义操作等待用户单击“确定”或“取消”?我希望我的自定义操作仅在表单关闭时完成。因此,请在我的自定义操作中执行以下操作: CollectUninstallData f = new CollectUninstallData(); f.Show(); return f.FormResult; 但是表单会闪烁片刻,卸载将继续,而不等待表单关闭。这是合乎逻辑的,因为

我想在卸载时显示我的自定义windows窗体。我将为此使用C#自定义操作。如何让自定义操作等待用户单击“确定”或“取消”?我希望我的自定义操作仅在表单关闭时完成。因此,请在我的自定义操作中执行以下操作:

    CollectUninstallData f = new CollectUninstallData();
            f.Show();
            return f.FormResult;
但是表单会闪烁片刻,卸载将继续,而不等待表单关闭。这是合乎逻辑的,因为GUI位于另一个线程中。但是如何让它等待表单关闭

我知道在安装包中显示自定义windows窗体并不酷,因此,如果有人能提供更优雅的解决方案,我将欣然接受。

您必须使用方法而不是
Show()
。后者使窗体可见并返回控件,这就是自定义操作停止执行的原因。前者将窗体显示为一个模式对话框,在用户以任何方式关闭窗体之前不会返回

CollectUninstallData f = new CollectUninstallData();
DialogResult r = f.ShowDialog();
f.Dispose(); 
return r;

如果您想知道用户是单击了确定还是取消,请使用以下语句
returnr==DialogResult.OK?0:1
。返回代码为零通常表示成功,非零表示失败。

为什么不使用Windows Installer提供的UI?(然而,当从控制面板启动卸载时,卸载在最小的UI中运行?@Alexey Ivanov如果我的方法不起作用,我会尝试。对我来说,在.NET中创建表单要比在WiX中容易得多。您可以使用它为Windows Installer设计UI。嵌入式UI比.NET更轻量级。卸载时您试图收集哪些数据?还是只是一种确认?@Alexey Ivanov,谢谢,我会试试的,我从来没听说过。可以在WiX中创建我的表单。应该有很多复选框和文本框。