2013-04-17 87 views
1

我有一個共享DLL(COM對象),我們將其稱爲由多個產品安裝的Utility.dll。在我的WIX文件中,我將Utility.dll作爲單獨的組件安裝。Wix:組件更新無法按預期方式工作

現在我發佈新版本2.0,並使用相同的組件GUID和路徑。理論上他的組件應該ref計數,howevever這不是happended:

  1. 安裝產品1 1.0(1.0 Utility.dll)
  2. 安裝產品2 2.0(2.0 Utility.dll)

的Utility.dll在磁盤上是2.0

  1. 刪除產品1 1.0和Utility.dll被刪除。

以前的安裝程序是在InstallShield中編寫的,而當前的安裝程序是在Wix3中編寫的。 Utility.dll的組件GUID和路徑是相同的(雙重檢查)。

回答

1

查看詳細日誌文件中的Component的GUID。您應該看到指示是否有其他客戶(產品)Component的消息。這將解釋爲什麼卸載刪除文件。

+0

它說「允許卸載共享組件:{Component-GUID}。其他客戶端存在,但安裝到不同的位置」。我猜Windows認爲組件安裝到了不同的位置?但最終的位置是一樣的。 – cuteCAT

+0

這就是你的答案。組件*被安裝兩次,但安裝到不同的位置。 –

+0

我不確定Windows安裝程序是如何定義「不同位置」的。但該文件安裝到相同的位置。由於之前的安裝程序是在InstallShield中完成的,因此Directory中的名稱不完全相同,但最終路徑相同。 – cuteCAT

1

我剛碰到相同的確切問題,因爲這兩個組件之間的KEYPATH不同,文件被卸載。在我的情況下,我在較新版本的安裝程序中添加了一個配套文件,以確保安裝了最新的文本文件。由於文件不能是KEYPATH並且有配套文件,所以我不得不更改KEYPATH。

通過搜索組件GUID的前8個字符,您可以在註冊表中找到相反的組件。該註冊表文件夾將爲每個安裝了該GUID的MSI都有一個密鑰,並且數據字段將顯示KEYPATH。我的猜測是KEYPATH對於1.0版本的機器與2.0版本的機器是不同的。

相關問題