Wix安装相同的版本

时间:2016-10-27 14:14:27

标签: wix windows-installer

我有一个具有五个功能的wix安装程序。我当前的版本是0.0.0.125。我正在一台机器上安装这个,前三个功能。后来我希望安装剩下的两个功能,因此取消选择前三个功能并选择剩下的两个功能。 所以这次不应该删除已经安装的前三个,并且应该安装剩下的两个功能。但是当我第二次安装相同的版本时,会自动从目标位置删除这三个功能,并且仅安装选定的两个功能。

我使用RemoveFile子属性来覆盖每个Component,当我手动复制文件并粘贴到目标目录时,下次安装相同版本的安装程序时,它不会覆盖和取消选择(以前安装的功能)功能删除。所以我通过在InstallExecuteSequence中添加1来限制它。

i)我需要覆盖所有文件 ii)同一安装程序的每次安装都不应删除以前安装的文件

由于

2 个答案:

答案 0 :(得分:1)

我无法准确说出功能的含义并安装相同的设置两次,但是:

您无法安装两次相同的MSI设置。它已经安装(ProductCode),因此它将进入维护/修复模式。这可能会进行修复/重新安装,或者,如果您已经为其进行了功能维护,那么Windows将再次注意到该产品已经安装但提供了标准功能对话框,可以让您从设置中添加功能,后一种模式是如果你去Program& Features并选择更改,你会得到什么。换句话说,真正的功能维护设置主要从程序和功能提供功能选择对话框,在您的方案中添加两个功能,您只需使用程序和功能的更改,而不是尝试重新安装相同的设置。

你的帖子是指Components和RemoveFile,你绝对不需要做任何这些。如果您没有使用真正的Windows Installer功能并且已经构建了基于组件的设置,其中组件安装基于条件,则可以解释您所看到的内容。用于您的条件的属性值不会保留,因此当您尝试再次安装相同的安装程序时,它将进入当前安装的产品的维护重新安装模式,属性值为空,条件为false,因此这些组件将被删除。

说了这么多,你还没有发布你的WiX,而且你试图安装两次相同的设置意味着你可能不熟悉维护,功能和组件。总之,您似乎应该使用WixUI_FeatureTree对话框,将组件分组为功能以实现您正在寻找的功能。

如果您的目标是替换需要更新的文件,那么您应该查看WiX MajorUpgrade元素。如果将MigrateFeatures设置为yes,则升级将导致升级后仍安装相同的功能。安排afterInstallExecute可能就是你想要的。增加要更新的文件的文件版本,使用新的ProductCode,在前三个字段中增加ProductVersion并使用相同的UpgradeCode。或者,您可以查看创建补丁,msp文件。

答案 1 :(得分:0)

通常,您需要为卸载后要保留在计算机上的文件设置Permanent="yes",并且" no"如果想要删除或覆盖它们。

例如:

      <util:XmlFile Id="fileId"
                Action="setValue"
                Permanent="yes"
                File='[INSTALLFOLDER]pathtofile\yourApp.exe'
                ElementPath="" 
                Value=""
                Sequence="1"/>

希望这有帮助!