【问题标题】:handle "Another version of this product is already installed. Installation of this version cannot continue..."处理“已安装此产品的另一个版本。无法继续安装此版本...”
【发布时间】:2013-02-20 12:11:31
【问题描述】:

我的安装程序有 32 位和 64 位版本,它们具有(几乎)完全相同的代码和自定义操作序列(只有与此问题无关的细微差异)

我希望我的安装程序检测它之前是否已经安装,在这种情况下运行我自己的代码而不是显示默认的 Windows Installer 错误:

已安装此产品的另一个版本。安装 此版本无法继续。配置或删除现有的 此产品的版本,请使用控制面板上的添加/删除程序。

我的 32 位安装程序工作得非常好,如果我在产品已安装时运行安装程序,它会运行我的自定义代码,但我的 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.

【问题讨论】:

    标签: installation windows-installer installshield installshield-2011


    【解决方案1】:

    此消息通常仅在开发阶段出现,不会出现在最终用户机器上。出现该消息是因为您只修改了包中的资源并重新构建它,没有增加版本号,因此 Windows Installer 会看到机器上有一个具有相同产品代码和名称的包,但带有不同的包代码。

    您的用户永远不会收到此消息,因为我假设您会在发布软件包时增加版本号。这也基于您的函数名称,即“CheckPreviousVersion”。

    如果您希望在机器上发现旧版本时显示自定义消息,请确保首先安装旧版本,您当前已安装最新版本,但使用另一个先前构建的包(即不同的包代码) .

    【讨论】:

    • 我是最终用户,现在可以使用了。
    • 联系软件提供商,他们可能给了你(或在他们的网站上发布)两个相同版本的不同版本。唯一的解决方案是手动卸载旧的(从控制面板),然后安装新的。
    • 为什么我更改了版本号,但我没有更改产品代码?
    • 即使通过“添加或删除程序”中的控制面板卸载了旧版本的产品,我也会收到此错误。什么给了?
    【解决方案2】:

    如果您使用的是 BasicMSI 安装程序,您可以创建一个系统搜索来检查以下注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\(Wow6432Node)\Microsoft\Windows\CurrentVersion\Uninstall\您的产品代码

    如果此密钥可用,则计算机上会安装旧版本的设置。现在创建一个放置在“CheckPreviousVersion”之前的自定义操作来运行您的代码。将此自定义操作的条件设置为系统搜索中的属性。

    这应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2014-11-15
      • 2022-12-14
      • 2013-11-15
      • 1970-01-01
      相关资源
      最近更新 更多