2012-01-19 159 views
6

您好我正在使用下面的代码使用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> 

任何建议表示赞赏。

回答

5

您可以尝试更改升级顺序,方法是修改RemoveExistingProducts操作的顺序。您可以将它放在InstallFinalize之后(链接文章中没有4选项)。

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

编辑:同时添加“从不覆盖”属性的组件。

+0

完成 并没有NeverOverwrite = “是” 永久= “是” 在我的组件,它仍然会覆盖我以前的文件。不知道我在做什么错误 – TheWommies

2

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

+0

如果RemoveExistingProducts操作在InstallExecute之前,这还不够。 – Ciprian

+0

@Ciprian - 默认情况下不会WIX调度InstallExecute后的RemoveExistingProducts操作? – imagi

+0

你可能是对的。我没有关于WIX的广泛知识。 – Ciprian