WIX安装文件,覆盖

时间:2012-01-19 23:32:10

标签: wix

您好我正在使用WIX将文件安装到目录中,并使用以下代码。

 <Directory Id="CMSICONSDIR" Name="CMSIcons">
    <Component Id="CMSICONSDIR_C" Guid="B0328FBF-D9F7-4278-B16C-28650016FF86" SharedDllRefCount="no" KeyPath="no" NeverOverwrite="no" Permanent="no" Transitive="no" Location="either">
       <CreateFolder/>
       <File Id="AddCamera.png" Name="AddCamera.png" DiskId="1" Source="..\..\OrionVEWorld\bin\Release\CMSICons\AddCamera.png" KeyPath="no"  />
       <File Id="aldownloadsmall.png" Name="al-download-small.png" DiskId="1" Source="..\..\OrionVEWorld\bin\Release\CMSICons\al-download-small.png" KeyPath="no"  /> 

我的应用程序的工作方式是用户可以在该目录中复制自己的文件,覆盖他们喜欢的内容。

问题是当我为下次安装进行更新时,它会使用安装中规定的文件覆盖这些文件。

如何确保在运行安装时它不会覆盖现有文件,只会添加新文件。

不幸的是,在其他情况下,我确实需要覆盖那里的文件。

我有一个升级脚本部分,可以影响这一点,如下所示

<Upgrade Id="$(var.UpgradeCode)">
  <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="no" Property="NEWERVERSIONDETECTED"/>
  <UpgradeVersion Minimum="1.0.0.0"
                  IncludeMinimum="yes"
                  OnlyDetect="no"
                  Maximum="$(var.ProductVersion)"
                  IncludeMaximum="no"
                  Property="PREVIOUSVERSIONSINSTALLED" />
</Upgrade>

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:5)

您可以尝试通过修改RemoveExistingProducts操作的顺序来更改升级顺序。您可以在InstallFinalize之后放置它(链接文章中没有4个选项)。

此外,this文章解释了Windows安装程序如何处理整个文件覆盖逻辑。

编辑:同时在组件中添加“永不覆盖”属性。

答案 1 :(得分:2)

尝试将NeverOverwrite属性添加到组件中。它应该做的伎俩。