handle Другая версия этого продукта уже установлена. Установка этой версии не может быть продолжена

У меня есть 32-разрядная и 64-разрядная версии моего установщика, которые имеют (почти) тот же код и последовательность настраиваемых действий (есть только незначительные отличия, которые не имеют отношения к этой проблеме)

Я хочу, чтобы мой установщик определил, был ли он уже установлен ранее, и в этом случае запустил мой собственный код вместо отображения ошибки установщика Windows по умолчанию:

Другая версия этого продукта уже установлена. Установка этой версии не может быть продолжена. Чтобы настроить или удалить существующую версию этого продукта, используйте «Установка и удаление программ» на панели управления.

Мой 32-разрядный установщик отлично работает, поскольку он запускает мой собственный код, если я запускаю установщик, когда продукт уже установлен, но тот же код и настраиваемое действие в моем 64-разрядном установщике НЕ работают правильно и всегда показывают нежелательную ошибку. сообщение

CheckPreviousVersion - это первая функция, вызываемая как настраиваемое действие во время последовательности пользовательского интерфейса. Я пробовал размещать ее в разных местах, например, после 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.

person Nothing 2 Lose    schedule 05.03.2013    source источник


Ответы (2)


Это сообщение обычно появляется только на этапах разработки, а не на компьютере конечного пользователя. Это сообщение появляется, потому что вы изменяете только ресурсы из пакета и перестраиваете его, без увеличения номера версии, поэтому установщик Windows видит, что на компьютере есть пакет с тем же кодом продукта и именем, но с другой код пакета.

Ваши пользователи никогда не получат это сообщение, потому что я предполагаю, что вы увеличите номер версии при выпуске пакета. Это также основано на имени вашей функции, то есть «CheckPreviousVersion».

Если вы хотите, чтобы при обнаружении на компьютере более старой версии отображалось настраиваемое сообщение, убедитесь, что у вас сначала установлена ​​старая версия, в настоящее время у вас установлена ​​последняя версия, но с использованием другого ранее созданного пакета (т. Е. Другого кода пакета).

person Bogdan Mitrache    schedule 06.03.2013
comment
Я конечный пользователь и получаю это сейчас. - person Edward Falk; 15.05.2015
comment
Обратитесь к поставщику программного обеспечения, он, вероятно, предоставил вам (или опубликовал на своем сайте) две разные сборки одной и той же версии. Единственное решение - вручную удалить старый (из Панели управления), а затем установить новый. - person Bogdan Mitrache; 18.05.2015
comment
Почему появляется, если я изменил номер версии, но не изменил код продукта? - person XtianGIS; 05.07.2016

Если вы используете установщик BasicMSI, вы можете создать системный поиск, который проверяет следующий ключ реестра:

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

Если этот ключ доступен, на компьютере установлена ​​более старая версия вашей установки. Теперь создайте настраиваемое действие, которое помещается перед «CheckPreviousVersion» для запуска вашего кода. Задайте условие для этого настраиваемого действия для свойства из вашего системного поиска.

Это должно делать свое дело.

person Arctic Strike    schedule 13.03.2013