Установщик Windows не устанавливает функцию и не сообщает об ошибке. (Запрос: Нулевой)

Простой MSI, созданный с помощью WiX. Попытка установить продукт. На некоторых компьютерах произойдет сбой без ошибки, и журнал установщика будет содержать следующие строки:

PROPERTY CHANGE: Adding WIX_UPGRADE_DETECTED property. Its value is '{7C9...0A0}'
PROPERTY CHANGE: Adding MIGRATE property. Its value is '{7C9...0A0}'
Product Code from property table after transforms:  '{68F...FAE}'
Product not registered: beginning first-time install
Doing action: INSTALL 
Doing action: InstallValidate 
Feature: ProductFeature; Installed: Absent;   Request: Null;   Action: Null 
MIGRATE = {7C9...0A0};{A9B...BCE}
Installation completed successfully.

Каким-то образом установщик Windows решает, что делать нечего (Request: Null), хотя признает, что это первая установка. На этом компьютере была установлена ​​предыдущая версия продукта. Как заставить установщик установить?

Вот соответствующий код WiX:

<Product Id="*"
           Name="..."
           Language="1033"
           Version="..."
           Manufacturer="..."
           UpgradeCode="8D8...196"> 

<Package Id="*"
             InstallerVersion="200"
             Compressed="yes"
             InstallScope="perMachine"
             InstallPrivileges="elevated"
             Platform="$(var.Platform)" />

<Property Id="REINSTALLMODE" Value="amus" />

<MajorUpgrade AllowDowngrades="yes" IgnoreRemoveFailure="yes" AllowSameVersionUpgrades="no"/>

<Feature Id="ProductFeature" Title="..." Level="1" Absent="disallow" AllowAdvertise="no" InstallDefault="local" TypicalDefault="install">
      <Condition Level="1">True</Condition>

Полный журнал установщика: https://www.dropbox.com/s/abnryavh203a82w/acme_installer_log.txt?dl=0

2 ответа

Решение

Это слишком долго для комментария, добавляя в качестве ответа. Просто пара вещей:

  1. Вы определенно не должны устанавливать REINSTALLMODE="amus" для любого пакета MSI.

    • Если вы включите модули слияния в эту настройку, вы можете понизить версию общих файлов - даже если вы сами не пишете в общие папки.
    • Лучше всего будет по умолчанию "omus", но я думаю "emus" тоже нормально (Reinstall if the file is missing, or is an equal or older version).
  2. Это, безусловно, выглядит как MigrateFeatureStates action по крайней мере связано с видимой проблемой:

    • MigrateFeatureStates: based on existing product, setting feature 'ProductFeature' to 'Absent' state.

    • Ваш INSTALLLEVEL property выглядит хорошо.

    • Возможно, вы захотите открыть скомпилированный MSI и убедиться, что в Condition table (который может изменять состояния выбора функции). Там не должно быть ничего, но, возможно, просто проверить.

    • Я полагаю, вы могли бы попытаться установить Absent attribute для WiX Feature element в "disallow", перекомпилируйте и посмотрите, если это изменит вещи. Если это ваша единственная функция, я бы внес это изменение в дополнение к предложению Phils для установки MigrateFeatureStates to "No", Зачем разрешать удаление вашей единственной функции?

  3. Немного странно, как эта проблема возникла. Возможно, вы запустили модификацию MSI и просто выбрали функцию, которая будет удалена при старой установке на компьютере? Звучит маловероятно - особенно если это ваша единственная функция.

    • Вы установили несколько более ранних версий своего продукта на данный компьютер или была только одна предыдущая версия?

    • Опять же, есть ли записи в "Таблице условий" в скомпилированном MSI? (Проверьте с помощью Orca).

    • Изменили ли вы имя функции в своем новейшем пакете?

В любом случае вы должны быть в состоянии "исправить" неработающую установку: 1) просто запустите существующую установку и добавьте ADDLOCAL=ALL в команду установки msiexec.exe - я думаю, что она переопределит действие MigrateFeatureStates (не реальное исправление, просто Обходной путь). Или 2) вы можете отключить MigrateFeatureStates и перекомпилировать настройку - это должно исправить положение вещей, и 3) на вашем месте я бы установил Absent attribute для WiX Feature element в "disallow" так что ваша (только?) функция не может быть удалена.

Фил, если ты видишь это, ты знаешь, что такое свойство MIGRATE, увиденное в журнале? Это похоже на некоторые специфичные для WiX вещи - если только это не что-то из таблицы обновлений MSI:

MSI (c) (04:24) [13:01:38:751]: Doing action: FindRelatedProducts
MSI (c) (04:24) [13:01:38:751]: Note: 1: 2205 2:  3: ActionText 
Action 13:01:38: FindRelatedProducts. Searching for related applications Found application: [1]
Action start 13:01:38: FindRelatedProducts.
FindRelatedProducts: 
MSI (c) (04:24) [13:01:38:751]: PROPERTY CHANGE: Adding WIX_UPGRADE_DETECTED property. Its value is '{7C945F97-A2CC-4EEB-87AC-3D23D6C490A0}'.
MSI (c) (04:24) [13:01:38:751]: PROPERTY CHANGE: Adding MIGRATE property. Its value is '{7C945F97-A2CC-4EEB-87AC-3D23D6C490A0}'.
FindRelatedProducts: 
MSI (c) (04:24) [13:01:38:752]: PROPERTY CHANGE: Modifying WIX_UPGRADE_DETECTED property. Its current value is '{7C945F97-A2CC-4EEB-87AC-3D23D6C490A0}'. Its new value: '{7C945F97-A2CC-4EEB-87AC-3D23D6C490A0};{A9B1787A-32E4-4D51-819D-B3F879574BCE}'.
MSI (c) (04:24) [13:01:38:752]: PROPERTY CHANGE: Modifying MIGRATE property. Its current value is '{7C945F97-A2CC-4EEB-87AC-3D23D6C490A0}'. Its new value: '{7C945F97-A2CC-4EEB-87AC-3D23D6C490A0};{A9B1787A-32E4-4D51-819D-B3F879574BCE}'.
Action ended 13:01:38: FindRelatedProducts. Return value 1.

tandrasz: насколько я вижу, два идентификатора GUID, найденные FindRelatedProducts ({7C945F97-A2CC-4EEB-87AC-3D23D6C490A0};{A9B1787A-32E4-4D51-819D-B3F879574BCE}), отличаются от кода продукта вашей новой установки ({68F5E655-2E2D-492E-B445-BE1650AF5FAE}). Это создает впечатление, что на рассматриваемой машине FindRelatedProducts обнаружил два "связанных продукта". Установлены ли две более старые версии одного и того же MSI, или у вас есть "набор" файлов MSI, которые имеют общий код обновления?, Если у вас установлено два "несвязанных" пакета, возможно, MigrateFeatureStates не найдет способа перенести состояния функций между этими двумя и новым пакетом, который вы устанавливаете?

Вы не установили MigrateFeatures в своем элементе MajorUpgrade. В документации сказано, что значением по умолчанию является Да.

http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html

Журнал показывает, что вы делаете обновление, поэтому единственные функции, которые будут установлены, - это тот же набор, который уже установлен.

Не ясно, сколько функций имеется в вашем продукте, но если вы всегда хотите, чтобы все функции были установлены во время обновления, установите для MigrateFeatures значение Нет.

В любом случае, было бы лучше предоставить весь журнал, чтобы увидеть, что происходит, и если есть другое объяснение.

Другие вопросы по тегам