Установщик 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 ответа
Это слишком долго для комментария, добавляя в качестве ответа. Просто пара вещей:
Вы определенно не должны устанавливать
REINSTALLMODE="amus"
для любого пакета MSI.- Если вы включите модули слияния в эту настройку, вы можете понизить версию общих файлов - даже если вы сами не пишете в общие папки.
- Лучше всего будет по умолчанию
"omus"
, но я думаю"emus"
тоже нормально (Reinstall if the file is missing, or is an equal or older version
).
Это, безусловно, выглядит как
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"
, Зачем разрешать удаление вашей единственной функции?
Немного странно, как эта проблема возникла. Возможно, вы запустили модификацию 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 значение Нет.
В любом случае, было бы лучше предоставить весь журнал, чтобы увидеть, что происходит, и если есть другое объяснение.