2012-04-20 93 views
1

這裏有一些小問題。我們使用下面的代碼段在安裝時寫的ini文件:Wix:防止Windows安裝程序服務恢復文件

<Component Id="_CFG" Guid="{CADE766F-3AF0-40A6-9D35-12AC4FD5B278}" Feature="DefaultFeature" KeyPath="yes" Location="either" NeverOverwrite="yes"> 
<CreateFolder Directory="CFG" /> 
<Environment Id="SharedAppend" Name="Path" Value="[CommonFilesFolder]Company Shared\MyDir" Separator=";" Action="set" Part="last" Permanent="yes" System="yes" /> 
<IniFile Id="MyCFG.ini1" Action="addLine" Directory="CFG" Key="LOCAL_ROOT" Name="ata.ini" Section="ALIAS" Value="[CommonAppDataFolder]Company\MyDir" /> 
    <IniFile Id="MyCFG.ini73" Action="addLine" Directory="CFG" Key="APPLICATIONS" Name="ata.ini" Section="GENERAL" Value="Product1;Product2;Product3;Product4;" /> 
<RegistryValue Id="Registry47asdf" Root="HKLM" Key="SOFTWARE\Company\MyProd" Name="LocalRoot" Value="[CommonAppDataFolder]Company\MyDir\" Type="string" /> 
</Component> 

此安裝是由管理員用戶進行的。現在第二個用戶(標準)通過一些應用程序修改這個文件。之後,當第三位用戶登錄並啓動應用程序時,將顯示Windows安裝程序進度對話框,然後將該文件恢復到原始狀態。

我想,「NeverOverwrite」會阻止這一點,但它沒有奏效。

我假設「NeverOverwrite」屬性可能不適用於元素。

任何人有任何想法如何防止此文件從Windows安裝程序服務恢復?

多謝..

回答

0

修改ini文件中不應觸發Windows Installer Resiliency。會發生什麼情況是組件將在keypath(即某個文件或註冊表項)消失時重新安裝。

所以,你需要弄清楚這些事情:

  1. 哪個組件安裝 INI文件? (我想這不是你的問題中顯示的組件,因爲那個只有修改了 INI文件。)
  2. 該組件的關鍵路徑是什麼? (如果未明確標記,wix將採用該組件中的第一個文件或註冊表項。)
  3. 爲什麼keypath文件或註冊表項消失,從而觸發重新安裝該組件?

另外,您可能要考慮將ini文件放在它自己的組件中。這樣,它將成爲自己的keypath,並且只有在Windows Installer彈性機制實際上消失時纔會重新安裝(而不是某些其他文件或註冊表項消失。)

+0

Wim,感謝您的詳細回覆。 你的觀點3是我的觀點,我嘗試在我的代碼中進行更正。實際上,整個Component是KeyPath ='yes',所以我將Keypath移到了註冊表項。 我只是等待構建出來,然後將評估。 謝謝 – 2012-05-01 06:58:02