是否可以在wix中添加卸载对话框?

时间:2009-12-24 08:47:46

标签: wix windows-installer

我想添加自定义对话框以卸载我的应用程序。 我也尝试了以下内容:

<InstallUISequence>
   <Show Dialog="RemoveDlg" OnExit="success">REMOVE="ALL"</Show>
</InstallUISequence>

是否可以在wix中使用?任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

虽然您当然可以创建特定于产品删除的对话框,但是从“添加或删除程序”(现在的“程序和功能”)中的“删除”按钮开始的卸载是在没有UI顺序的情况下运行的,因此不会显示这些对话框。一种常见的替代方法是设置ARPNOREMOVE属性,然后要求最终用户单击“修改”而不是“删除”。修改按钮启动维护,它会显示您的UI。

答案 1 :(得分:0)

除非%appdata%\ product \中的数据可能导致重新安装应用程序出现问题,否则我建议您在卸载时将其保留。您在此文件夹中安装的任何内容都被视为用户数据,默认情况下不应自动删除 - 通常也不作为选项。许多公司对userprofile文件夹应用自定义权限。在那里乱搞可能会导致你的MSI严重慌乱 - 特别是在终端服务器上触发自我修复(通常在TS上不允许)。

请注意,安装,卸载和修补使用相同的安装顺序。如果您使用主要卸载并重新安装产品的主要升级修补程序,则最终可能会删除用户数据并为每次安装重新安装。如果这是可以接受的,那么您处理的数据不是用户数据,因此位于磁盘上的错误位置。

如果您通过检查退出代码的自定义操作在卸载结束时运行删除操作,则可能会触发卸载的回滚,从而导致重新安装产品并且无法卸载!很少见,但它发生了。如果自定义操作在InstallFinalize之后运行,因此在MSI安装序列之外,您的安装程序可能会返回卸载错误代码并导致产品损坏,卸载不完整或产品部分未注册。

总之我不会乱搞这个。如果你有坚持不懈的客户,如果我能提供帮助,我就不会搞乱对话。我将添加一个PUBLIC属性来控制是否在InstallFinalize之前立即运行自定义操作。刷新任何错误返回码并将信息写入MSI日志。然后,用户可以通过在命令行上指定属性或在属性表中对其进行硬编码来卸载用户数据。

如果您必须拥有GUI,则可以使用相同的属性从自定义对话框进行设置,以控制是否执行删除。请务必小心处理对话框的显示。 I.E在修补操作期间不显示它。