我爲我的產品定位了Windows XP及更高版本,並使用Windows安裝程序(WI)進行安裝。生成的.msi文件有一個產品代碼,比如PC1(實際上是一個guid)和一個升級代碼UC1(也是一個guid)。一段時間後,我爲我的產品的更新版本創建了一個新的設置。新的.msi文件有一個新的產品代碼PC2和相同的升級代碼UC1(也稱爲主要升級)。我的公司希望使用我們自己的安裝程序安裝.msi文件。爲此,我們基本上使用MsiInstallProduct來安裝.msi文件,而整個UI在我們自己的安裝程序中(並且我們使用MsiSetExternalUI來請求WI向我們發送通知)。那我遇到的問題如下:使用MsiSetExternalUI時添加/刪除程序控制面板中的重複條目
如果兩個版本的產品的安裝使用「MSIEXEC/I myapp.msi」,那麼只會有一個條目中的「添加在同一臺機器上「程序和功能」控制面板小程序中的「/刪除程序」。換句話說,在安裝新版本時,舊版本會被卸載。
如果兩個版本使用MsiInstallProduct以編程方式安裝在同一臺機器上,則控制面板中將有兩個不同的條目。
再次,只有當我試圖以編程方式安裝(使用MsiOpenPackage + MsiDoAction或MsiInstallProduct),升級不會發生,我結束了在控制面板中的兩個項目。我還發現,如果在調用MsiInstallProduct或MsiDoAction之前未使用MsiSetExternalUI設置外部UI回調,則新安裝的升級部分也可按預期工作,CP中不會出現重複條目。
,我使用的MsiSetExternalUI回調是基本相同的一個MSDN文章中: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368786(v=vs.85).aspx
我能做些什麼(或者什麼,我需要在我的回調處理),以避免重複/多控制面板中的條目?
感謝和問候,
利文特
如果您在失敗的方案中記錄安裝程序,FindRelatedProducts會報告什麼內容?你的ALLUSERS禮服又是什麼? (例如,Per User安裝不能主要升級Per Machine安裝。) –
我以管理員用戶身份運行。該產品是爲所有人安裝的。 ALLUSERS = 2,但我沒有手動設置。通知INSTALLMESSAGE_ACTIONSTART和INSTALLMESSAGE_INFO我只能通過返回IDOK來處理。 – Levy
我在日誌中得到這個:.... INSTALLMESSAGE_INFO:Action start 3:40:02:FindRelatedProducts。
INSTALLMESSAGE_ACTIONDATA:找到的應用程序:{85144A07-AECF-4842-A9C4-9EBAFED473B7} – Levy