我試圖理解/解釋正在發生的事情如下:瞭解引用計數 - Windows安裝程序
1)A.msi創建一個目錄\路徑\爲\ FOO
2)B.微星發現\路徑\使用註冊表\ foo和增加了一些文件到該位置
3)如果B.msi被卸載,它增加了額外的文件被刪除
4)是否有更新版本A.msi的安裝(主要升級)在B.msi卸載之前安裝,隨後卸載B.msi會將其添加到\ path \的文件保留爲\ foo。 msiexec/x日誌看起來像這樣:
(SERVER) MSI (s) (60:08) [14:09:33:018]: Disallowing uninstallation of component:
{BIFF} since another client exists
(SERVER) MSI (s) (60:08) [14:09:33:019]: Disallowing uninstallation of component:
{BAM} since another client exists
(SERVER) MSI (s) (60:08) [14:09:33:019]: Disallowing uninstallation of component:
{HARVEY} since another client exists
(SERVER) MSI (s) (60:08) [14:09:33:019]: Disallowing uninstallation of component:
{ETC} since another client exists
因此,顯然,引用計數,對吧?但不是以我理解的方式。我會認爲,因爲每個文件都是用一個組件單獨包裝的,並且組件GUID是唯一的,所以兩個MSI之間的引用計數將保持類似的獨立/唯一性。
上次安裝程序是否贏得了目錄的所有權,並且目錄的所有權必然會干擾引用計數/刪除被計數的組件包裝的文件?有沒有人有鏈接/文件,他們可以與我分享這個話題?
我通常在包從看到這條消息我們僅當客戶端具有相同的組件GUID時。我假設你沒有複製用於構建A.msi的項目文件並重新用於構建B.msi? (因爲這可能會導致重複的組件GUID) –
正確。 Guids在A和B的組件之間是唯一的。唯一共享的是B設置爲屬性的目錄,從A寫入的註冊表項中讀取它。 – NickHansen