0

我有基本的MSI項目,它的2個或更多版本可以並行安裝 除了單個exe這是共享的,並在桌面上有一個快捷方式。MSI卸載:獲取消息組件將不會被刪除,以便該圖標不會被刪除

在1.0版本的MSI我 組件 - 安裝文件\ Program Files文件\ prod_1.0 共享文件組件A - 安裝文件就\ Program Files文件\ prod_shared 共享快捷成分B - 在桌面上創建一個快捷方式到exe在A組份

在2.0版本的MSI我 組件 - 安裝文件\ Program Files文件\ prod_2.0 共享文件組件A - 安裝文件就\ Program Files文件\ prod_shared 共享快捷成分B - 上創建快捷方式桌面執行組件A

組件GUID對於兩個MSI版本都是相同的,我在共享快捷方式組件中使用的圖標不被其他快捷方式使用。 我有的問題是,如果我有2版本?並行安裝,然後我卸載一個版本我希望桌面快捷方式將被刪除。 我將此行添加到代碼 MsiSetComponentState(hMSI,「Shared_Shortcut_Desktop」,INSTALLSTATE_ABSENT);

但是,當我卸載我收到此消息 組件將不會被刪除,以便'NewShortcut74_AE5D17DE4C4B4737ABB20A0D0358B69E.exe'圖標不會被刪除。

任何想法如何解決它?

回答

0

如果這兩個快捷方式具有相同的組件guid,那麼除非您還沒有其他說明,否則它實際上只是一個共享組件,並且因爲它們由兩個設置共享,所以卸載其中一個不會將其刪除。如果您的共享文件具有相同的組件ID(例如)安裝到相同的CommonFiles文件夾位置,則將應用相同的規則 - 它不會刪除該文件,因爲該文件正在被其他產品使用。簡短的答案是使用不同的guid(也可以使用產品版本對其進行重命名)。

什麼是對MsiSetComponentState的引用與此有關?這意味着您已經編寫了一些代碼來嘗試刪除該組件,但是如果它仍然共享,MSI不會將其刪除。