2015-05-15 47 views
0

我正在創建一個安裝程序,它正在創建註冊表值並在卸載時將其刪除。但是,我正在使用的某些註冊表值可能會與其他配套應用程序共享。我只希望它刪除註冊表值,如果它是使用這些註冊表的唯一組件。如果安裝了其他使用這些註冊表值的應用程序,我的卸載程序不應刪除它們。我將如何去創造這個條件?處理共享註冊表值

回答

0

我認爲你要尋找的是通過使用基本MSI組件規則來實現的:

  • 所有的MSI是設置此共享的註冊表值必須設置爲的keyPath該組件的值。
  • 組件需要有相同的組件guid。

如果這些在所有MSI中都是通用的,那麼當一個產品被卸載時,註冊表值只應該減少它的refcount而不是刪除整個值。

0

建立在jbudrea的答案,對我來說,這是一個合併模塊有用的場景。您可以在10個安裝程序中擁有10個組件,並希望您保持GUID同步,或者您可以在合併模塊中執行一次並引用它10次。不要重複自己(幹)。這主要用於註冊表數據,如COM註冊或文件擴展處理程序。

對於某些數據(如配置數據),永久性組件可能有意義。足跡很小,在您卸載所有內容然後重新安裝其中一個產品後,仍然有數據仍然存在。這也假定你正在做一些屬性持久性模式。

配置數據的最後一個想法是在安裝時根本不會這樣做。相反,在第一次運行應用程序時保存設置,現在安裝將無法管理它,並且會像上面那樣在卸載時將其保留。 (我喜歡將配置數據視爲用戶數據,通常是MSI說的留下的配置數據。)