重建后,WiX安装程序不显示卸载对话框

时间:2015-07-09 11:07:09

标签: wix

我的自定义WiX 3.7安装程序中有一个安装和卸载对话框。这来自我的自定义Bootstrapper应用程序。如果未安装我的软件并启动安装程序,则会显示安装对话框。安装完成后,我启动安装程序,它会显示卸载对话框(自定义对话框)。

当我现在重建安装程序而不更改WiX安装程序项目中的任何内容并在安装软件时启动安装程序时,它不再显示卸载对话框。而是显示安装对话框。

检查是否已安装应用程序是在Bootstrapper的DetectBegin方法中进行的。但是,当我点击安装时,它意识到它已经安装并中止了该过程。

为什么会出现这种情况? Bootstrapper是否检查它是否已安装以决定显示哪个对话框?那么它是否认为它是一个不同的Bootstrapper,因为它被重建了?

如果是这样的话,当我的相同版本的应用程序已安装时,如何让Bootstrapper显示卸载对话框?我是否必须包含一些条件?

2 个答案:

答案 0 :(得分:1)

如果没有关于您的WiX / MSI和捆绑设置的更多信息,那么会有一些猜测但是:

MSI中的ProductCode确定是否安装了产品。没有在相同的上下文中安装相同的产品(代码)两次,例如每台机器。根据定义,它已经安装,因此尝试再次安装它会导致它进入维护模式,显然唯一的选择是卸载对话框。

如果您在不更改任何内容的情况下重建MSI,那么如果您有产品ID =" *"则不一样。因为这意味着每当您构建时,ProductCode都会发生变化,因此会有一个新产品,因为系统上没有安装它,您将获得一个安装对话框。

所以我怀疑你的MSI需要一个MajorUpgrade元素,这样你的新MSI增加了ProductVersion,相同的UpgradeCode和新文件将升级旧产品。

引导程序的工作方式类似,因为它是包装MSI的产品包,因此您可能也需要增加的包版本,以便MSI升级以及捆绑基础结构(可能拥有Progreams& amp; ;功能入口)。

答案 1 :(得分:0)

我找到了解决方案。显然,Bundle ID对于每个构建都是唯一的,并且无法设置它。这就是为什么在重建时,Bootstrapper回调" DetectBegin"有它的'#34;已安装"属于" DetectBeginEventArgs"设为false。这是我决定显示安装或卸载对话框的地方。

我现在另外使用" DetectRelatedBundle"打回来。在这里,"操作" " DetectRelatedBundleEventArgs"的属性如果安装了具有相同版本,产品代码和升级代码的应用程序,则设置为" RelatedOperation.None"