2011-04-29 149 views
0

我想在卸载时显示自定义windows窗体。我将为此使用C#自定义操作。如何让自定义操作等待直到用户单击确定或取消?我希望我的自定义操作仅在表单关闭时才能完成。所以做我的自定义操作如下:卸载时自定义windows窗体

CollectUninstallData f = new CollectUninstallData(); 
      f.Show(); 
      return f.FormResult; 

但形式闪烁了一下,卸载继续无需等待的形式关闭。由于GUI在另一个线程中,这是合乎逻辑的。但是,如何让它等待表单关闭?

我知道在安装包中显示自定义窗体并不酷,所以如果任何人都可以提供更优雅的解决方案,那么我会很高兴地接受它。

+1

为什么不使用Windows Installer提供的UI? (但是,从控制面板启动时,卸载在最小UI中运行?) – 2011-05-02 10:48:29

+0

@Alexey Ivanov如果我的方法无效,我会尝试。在.NET中创建表单比在WiX中更容易。 – 2011-05-02 18:42:30

+1

您可以使用[WixEdit](http://wixedit.sourceforge.net/)来设计Windows Installer的UI。嵌入式UI比.NET更轻量级。您想要在卸载时收集哪些数据?或者它只是一种确认? – 2011-05-03 06:05:36

回答

0

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

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

如果您想知道用户是否单击了“确定”或“取消”,请使用此语句return r == DialogResult.OK ? 0 : 1。返回码零通常表示成功,非零表示失败。