2016-10-27 145 views
0

我有一个wix安装程序有五个功能。我目前的版本是0.0.0.125。我在一台机器上安装了前三个功能。稍后我希望安装剩下的两个功能,并取消选择前三个功能,并选择其余两个功能。 所以这次不应该删除已经安装的前三个,而应该安装剩下的两个功能。但是,当我第二次安装相同的版本时,三个功能将自动从目标位置删除,并且只安装了所选的两个功能。Wix安装相同版本

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

我)我需要覆盖所有文件 II)相同的安装程序的每个安装不应该删除以前安装的文件

感谢

回答

0

通常你Permanent="yes"对于要保留的文件在卸载后在计算机上,如果想删除或覆盖它们,则输入“否”。

例如:

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

希望这有助于!

1

我不能确切地告诉你的特点和安装相同的设置意味着两倍,但:

不能安装相同的MSI安装程序的两倍。它已经安装(ProductCode),因此它将进入维护/修复模式。这可能会进行修复/重新安装,或者如果您已经为功能维护创作了它,那么Windows将再次注意到该产品已经安装,但提供了标准功能对话框,允许您从设置中添加功能,而后一种模式是正是你得到的,如果你去程序01​​功能并选择更改。换言之,真正的功能维护设置主要通过程序&功能提供功能选择对话框,在添加两个功能的场景中,您只需使用程序&功能中的更改,而不是尝试重新安装相同的设置。

你的文章引用了Components和RemoveFile,你绝对不需要做任何这些。如果您没有使用真正的Windows Installer功能,并且已经构建了基于组件的安装程序,其中组件安装基于条件,那么这将解释您所看到的内容。用于您的条件的属性值不会保留,因此当您尝试再次安装相同的安装程序时,它将进入当前安装的产品的维护重新安装模式,属性值为空,条件为false,因此将删除这些组件。尽管如此,你还没有发布你的WiX,并且你试图安装两次相同的设置的事实意味着你可能不熟悉维护,特性和组件。总而言之,您似乎应该使用WixUI_FeatureTree对话框集合,将您的组件分组到特性中以实现您要查找的内容。

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

+0

一旦我安装产品,我不想去维护模式。相反,总是应该首次安装。正如你所说的,我正在使用“SelectionTree”控件对组件进行分组。 <功能Id =“SecondFeature”Title =“Second Feature”Level =“1”>

+0

无法完成 - 您不知道Windows Installer的工作方式。 ProductCode已被安装,并且再次运行相同的ProductCode设置将不会安装,就好像它是第一次安装一样。也许您应该查看MajorUpgrade元素并迁移功能状态。 – PhilDW

+0

您是正确的PhilDW。我们想要实现这一点,我使用*在ProdcutCode中我打算在AppSearch期间从注册表中删除ProductCode(如果已安装)通过搜索产品名称ady。所以它会一直喜欢第一次安装。我删除了维护对话框并添加了CDATA(未安装或安装或修补程序)以显示我的所有对话框。因此,在相同版本的第一/二/三次安装中,将显示相同的对话框并执行所有已定义的自定义操作。 –

相关问题