2011-12-20 104 views
6

我們使用WiX 3.5爲我們的產品之一構建安裝程序。爲簡單起見,我們通過一次重大升級處理版本升級的,就像這樣:WiX - 在主要升級時保留註冊表設置

<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="Laterversionfound" /> 

我們沒有指定的時間表屬性,這意味着RemoveExistingProducts操作應「InstallValidate」後運行 - 這意味着舊版本完全卸載將在安裝新版本之前進行。

我們安裝了一些HKLM註冊表設置,用戶在安裝後必須配置這些設置。由於主要升級會執行完全卸載,然後重新安裝,因此我們正在丟失註冊表中的用戶定義設置。理想情況下,我們需要能夠在升級過程中保持這些。

我的註冊表關鍵部件是這樣的:

<Component Id="regserver" Guid="[guid]"> 
    <RegistryValue Root="HKLM" Key="Software\Our Company\Our Product" Name="Server" Value="" Type="string" KeyPath="yes" /> 
</Component> 

我試過設置的組件爲「yes」的NeverOverwrite屬性但這未能重現鍵的不幸影響 - 大概是因爲它檢查密鑰是否存在之前卸載發生(顯然他們這樣做),然後他們被刪除與卸載,但不會再次重新創建。

我也嘗試設置MajorUpgrade元素上的「RemoveFeatures」屬性來刪除除reg鍵以外的所有內容。儘管安裝了兩個版本的產品,但包含註冊表項的功能屬於舊版本。

我的下一步是嘗試在不同的時間點調度RemoveExistingProducts選項,儘管我期望對我們的一些自定義操作有一定的痛苦。

所以我的問題是,有沒有什麼辦法來實現我們需要的,而不會改變RemoveExistingProducts的計劃?

+0

您能更改原始安裝程序嗎?如果是這樣,您可以使註冊表組件永久,這意味着它不會被卸載。 – 2011-12-20 16:53:40

+0

我是否認爲即使產品被卸載,這也會使設置保持不變?理想情況下,我寧願爲我們的客戶完全清潔卸載 – 2011-12-20 17:48:09

回答

9

使用RegistrySearch將當前值加載到屬性中,然後使用RegistryValue中的[PROPERTY]來寫入這些值。如果沒有安裝舊產品,則屬性將保持其默認值。

+0

完美 - 感謝鮑勃 – 2011-12-21 15:56:31