2012-01-19 201 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