2013-12-10 18 views
1

我有一個託管的引導程序應用程序,其中包含四個產品。每個產品都使用"*"作爲Id,並具有唯一的UpgradeCode。如何在運行時在我的WiX ManagedBootstrapperApplication中確定包含產品的ProductCode?

在我的託管引導程序中,我需要獲取屬於我的包的產品的ProductCode(GUID)。檢測事件處理程序的事件參數(例如DetectPackageCompleteEventArgs)具有PackageId值,該值是msi的名稱(例如:「Common.msi」包具有「Common.msi」的PackageId)。

我還檢查BootstrapperApplicationData.xml文件,它具有ProductCode和包本身的UpgradeCode,而不是在單個產品的WixPackageProperties節點。

如果檢測到相關軟件包(升級),則ProductCode包含在DetectRelatedMsiPackageEventArgs中,但當運行當前安裝版本的安裝程序時(即:單擊「修改」在添加/刪除程序中)

如何在運行時間確定我的MBA在什麼ProductCode是包含的產品?

附加信息:

最後,我使用的產品代碼來獲得使用MsiGetProductInfo(productCode, "InstallLocation", strbuffer, len);這是專門爲其中用戶「修改」現有的安裝的情況下ARPINSTALLLOCATION值(即:運行相同的安裝程序版本作爲已安裝的軟件包 - 不是升級),我需要確定它們最初安裝的文件夾。

回答

2

簡答:產品代碼不提供給廣管局。但是一個明確的註冊表項(例如,跟在"remember property pattern" that Rob discusses之後)將比ARPINSTALLLOCATION/MsiGetProductInfo更加可靠和易於實現。

較長的回答:在所有「模式」下,刻錄運行檢測的方式相同,但是當軟件包中的軟件包版本與機器上安裝的版本相同時,顯式不會發送軟件包級別檢測消息。

這種靜態數據的位置在BA清單中,但在v3.8中不包含產品代碼。請file a feature request

+0

創建功能請求:http://wixtoolset.org/issues/4233/ –

相關問題