2009-12-27 45 views
1

使用.msi包時,如果它們不存在,我想創建一些註冊表項,如果它們存在,請將它們留在一邊,如果程序被刪除,則不要刪除它們。我已經通過向以下msi表添加條目來完成此操作(使用Orca):組件,FeatureComponents,Registry,& LockPermissions。我的問題是我應該如何處理這些鍵的組件表的ComponentID中使用的GUID?看起來有3種選擇。永久性註冊表項 - orca - msi guid

1)一次給他們,獨自離開他們在MSI

2)的未來版本的新版本產生

每次分配新

3)使用NULL(每http://msdn.microsoft.com/en-us/library/aa368007(VS.85).aspx)我沒有試過這個。

其中之一是比其他優先嗎?相互之間會有什麼後果嗎? (如果程序被刪除,我寧願留下儘可能少的東西)。

我也很想知道下面關於永久屬性位(16)的意思是什麼意思。

如果設置了該位,則安裝程序在卸載過程中不會刪除該組件。 安裝程序在Windows Installer註冊表設置中爲該組件註冊一個額外的系統客戶端。

哪裏可能找到這些條目?

回答

0

從Windows安裝MSDN主題Organizing Applications into Components

決不創建 下的同名 和目標位置安裝一個資源兩個部分組成。如果資源 必須在多個 組件中進行復制,請在每個組件中更改其名稱或目標 位置。此規則 應適用於所有應用程序, 產品,產品版本和 公司。

每當您發佈新版本時違反引用的規則,選項(2)將爲相同的註冊表項有效地創建一個新組件。

通過將組件GUID設置爲Guid="",可以在wix中完成選項(3)。它將使Windows安裝程序安裝組件資源,然後「忘記」該組件。這可能會做你想要的,因爲安裝的資源不會被刪除。但是,這也意味着「修復」將無法恢復註冊表項,如果它們丟失。

因此,你應該去選項(1)你有一個固定的GUID,並設置永久屬性保持組件的引用計數非零。 Windows安裝程序如何在內部執行此操作是您不應關心的實現細節,所以我沒有看到尋找這些Windows安裝程序註冊表設置的要點。

+0

還有一個問題。您引用的MSDN參考中的「名稱」是什麼意思?從你的答案我認爲'姓名'是GUID或Component Table條目的Component和GUID字段的組合。順便說一句,我更喜歡1),因爲我可以用一個Orca transfrom做到這一點,而無需任何後續編輯。 – 2009-12-27 21:59:26

+0

'name'表示已安裝資源的名稱,即文件名或註冊表項。 '兩個組件'是指'具有不同GUID的兩個組件'。 – 2009-12-28 16:53:17

+0

好吧,我很確定我明白,但是如果沒有強烈的暗示,我不會得出這個結論。 – 2009-12-28 20:54:01