2012-01-25 47 views
1

我爲我的產品定位了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

我能做些什麼(或者什麼,我需要在我的回調處理),以避免重複/多控制面板中的條目?

感謝和問候,
利文特

+0

如果您在失敗的方案中記錄安裝程序,FindRelatedProducts會報告什麼內容?你的ALLUSERS禮服又是什麼? (例如,Per User安裝不能主要升級Per Machine安裝。) –

+0

我以管理員用戶身份運行。該產品是爲所有人安裝的。 ALLUSERS = 2,但我沒有手動設置。通知INSTALLMESSAGE_ACTIONSTART和INSTALLMESSAGE_INFO我只能通過返回IDOK來處理。 – Levy

+0

我在日誌中得到這個:.... INSTALLMESSAGE_INFO:Action start 3:40:02:FindRelatedProducts。
INSTALLMESSAGE_ACTIONDATA:找到的應用程序:{85144A07-AECF-4842-A9C4-9EBAFED473B7} – Levy

回答

0

回覆我們的上述評論,我做了谷歌搜索CLIENTUILEVEL和前幾名的命中表明,我認爲CLIENTUILEVEL具有空值是正常的,REMOVE = ALL IS加工。這些註釋表明要在日誌中稍微深入一些並找出卸載(刪除現有產品)失敗的原因。如果你可以給我發一個完整的日誌文件([email protected]),我可以幫你看看。

RemoveExistingProduct standard action

Link to article describing how to interpret Windows Installer log files(見註釋)

RemoveExistingProducts running but not uninstalling Options

0

我遇到了我的ManagedMsiExec樣本項目相同的行爲:http://blogs.msdn.com/b/delay/archive/2012/01/09/make-things-as-simple-as-possible-but-not-simpler-managedmsiexec-sample-app-shows-how-to-use-the-windows-installer-api-from-managed-code.aspx

改變我的應用程序的記錄行爲沒有幫助我的情況。但是在獨立地注意到日誌中相同的「CLIENTUILEVEL = REMOVE = ALL」奇怪之後,我發現了一個解決方法,它在調用MsiDoAction之前顯式調用MsiSetProperty並將CLIENTUILEVEL設置爲0。

在我看來,這似乎是Windows Installer本身的錯誤(在RemoveExistingProducts期間錯誤地設置CLIENTUILEVEL),但也許還有其他事情我不明白。無論如何,我已經取得了這一改變的成功,也許其他人也可以。 :)

相關問題