3

我有我的安裝程序的32位和64位版本,它們具有(幾乎)完全相同的代碼&自定義操作序列(只有細微的差別,其不相關的這個問題)句柄「此產品的另一版本已安裝,此版本的安裝無法繼續...」

我想我的安裝程序,以檢測它是否已經預先安裝在這種情況下運行自己的代碼,而不是顯示默認的Windows Installer錯誤的:

Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.

我的32位安裝程序工作得很好,因爲它運行我的自定義代碼,如果我運行in當產品已經安裝,但是相同的代碼&我的64位安裝程序中的自定義操作無法正常工作,並始終顯示不需要的錯誤消息。

CheckPreviousVersion是在UI序列中稱爲自定義動作的第一個函數,我試着將它放在InstallValidate之類的不同位置,但沒有任何效果。

我已經研究了詳細的日誌文件,但我無法找到任何可能解釋這種行爲,這裏是日誌的一部分:

=== Verbose logging started: 05/03/2013 16:27:20 Build type: SHIP UNICODE 5.00.7601.00 Calling process: C:\Windows\system32\msiexec.exe 
=== 

MSI (c) (0C:94) [16:27:20:331]: Machine policy value 'Debug' is 0 MSI (c) (0C:94) [16:27:20:331]: ******* RunEngine: 
      ******* Product: foo.msi 
      ******* Action: 
      ******* CommandLine: ********** MSI (c) (0C:94) [16:27:21:546]: Machine policy value 'DisableUserInstalls' is 0 MSI (c) (0C:94) [16:27:21:557]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'C:\Builds\.msi' against software restriction policy MSI (c) (0C:94) [16:27:21:557]: Note: 1: 2262 2: DigitalSignature 3: 
-2147287038 MSI (c) (0C:94) [16:27:21:557]: SOFTWARE RESTRICTION POLICY: C:\Builds\.msi is not digitally signed MSI (c) (0C:94) [16:27:21:558]: SOFTWARE RESTRICTION POLICY: C:\Builds.msi is permitted to run at the 'unrestricted' authorization level. MSI (c) (0C:94) [16:27:21:584]: Cloaking enabled. MSI (c) (0C:94) [16:27:21:584]: Attempting to enable all disabled privileges before calling Install on Server MSI (c) (0C:94) [16:27:21:586]: End dialog not enabled MSI (c) (0C:94) [16:27:21:586]: Original package ==> C:\Builds\....msi MSI (c) (0C:94) [16:27:21:586]: Package we're running from ==> C:\Builds\.....msi MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: Uninstall Flags override found. MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: Uninstall VersionNT override found. MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: Uninstall ServicePackLevel override found. MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: looking for appcompat database entry with ProductCode '{B8CBA92E-2140-48AB-B4EA-A4C3FF10295B}'. MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: no matching ProductCode found in database. MSI (c) (0C:94) [16:27:21:599]: MSCOREE not loaded loading copy from system32 MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'DisablePatch' is 0 MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'AllowLockdownPatch' is 0 MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'DisableLUAPatching' is 0 MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'DisableFlyWeightPatching' is 0 MSI (c) (0C:94) [16:27:21:609]: APPCOMPAT: looking for appcompat database entry with ProductCode '{}'. MSI (c) (0C:94) [16:27:21:609]: APPCOMPAT: no matching ProductCode found in database. MSI (c) (0C:94) [16:27:21:609]: Transforms are not secure. MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding MsiLogFileLocation property. Its value is 'C:\Builds\Angoss\Products\Workstation\single-exec\INSTALL64.LOG'. MSI (c) (0C:94) [16:27:21:609]: Command Line: CURRENTDIRECTORY=C:\Builds\Angoss\Products\Workstation\single-exec CLIENTUILEVEL=0 CLIENTPROCESSID=7948 MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{}'. MSI (c) (0C:94) [16:27:21:609]: Product Code passed to Engine.Initialize: '' MSI (c) (0C:94) [16:27:21:609]: Product Code from property table before transforms: '{}' MSI (c) (0C:94) [16:27:21:609]: Product Code from property table after transforms: '{}' MSI (c) (0C:94) [16:27:21:609]: Product registered: entering maintenance mode MSI (c) (0C:94) [16:27:21:609]: Determined that existing product (either this product or the product being upgraded with a patch) is installed per-machine. MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding ProductState property. Its value is '5'. MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding ProductToBeRegistered property. Its value is '1'. MSI (c) (0C:94) [16:27:21:609]: Entering CMsiConfigurationManager::SetLastUsedSource. MSI (c) (0C:94) [16:27:21:609]: Specifed source is already in a list. MSI (c) (0C:94) [16:27:21:609]: User policy value 'SearchOrder' is 'nmu' MSI (c) (0C:94) [16:27:21:609]: Machine policy value 'DisableBrowse' is 0 MSI (c) (0C:94) [16:27:21:609]: Machine policy value 'AllowLockdownBrowse' is 0 MSI (c) (0C:94) [16:27:21:609]: Adding new sources is allowed. MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding PackagecodeChanging property. Its value is '1'. Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel. 

回答

4

此消息通常在開發階段纔出現,而不是在最終用戶機器上。因爲只修改軟件包中的資源並重建它,所以出現此消息,而不增加版本號,因此Windows安裝程序會看到機器上具有相同產品代碼和名稱的軟件包,但具有不同的軟件包代碼。

您的用戶永遠不會收到此消息,因爲我認爲您在發佈軟件包時會增加版本號。這也是基於你的功能名稱,即「CheckPreviousVersion」。

如果您希望在機器上發現舊版本時顯示自定義消息,請確保您首先安裝了舊版本,您目前已安裝最新版本,但使用了另一個以前生成的軟件包(即不同的軟件包代碼)。如果該鍵可設置你的舊版本安裝在計算機上

HKEY_LOCAL_MACHINE\SOFTWARE\(Wow6432Node)\Microsoft\Windows\CurrentVersion\Uninstall\YOURPRODUCTCODE

+2

我是最終用戶,現在我得到它了。 – 2015-05-14 22:57:59

+0

聯繫軟件提供商,他們可能會給你(或在他們的網站上發佈)兩個不同版本的相同版本。唯一的解決辦法是手動卸載舊的(從控制面板),然後安裝新的。 – 2015-05-18 07:49:14

+0

爲什麼它出現,如果我改變了版本號,但我沒有改變產品代碼? – XtianGIS 2016-07-05 20:39:35

4

如果you're使用BasicMSI安裝程序,您可以創建,檢查以下注冊表項的系統搜索。現在在「CheckPreviousVersion」之前創建一個自定義操作來運行你的代碼。將此自定義操作的條件設置爲系統搜索的屬性。

這應該做的伎倆。

相關問題