Windows Installer不安装功能,也不报告错误。 (要求:空)

时间:2017-08-21 07:33:08

标签: wix windows-installer

使用WiX创建的简单msi。试图安装产品。在某些计算机上,它将失败,没有错误,安装程序日志将包含以下行:

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 Installer决定无事可做(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 个答案:

答案 0 :(得分:2)

您没有在MajorUpgrade元素中设置MigrateFeatures。文档说默认值为Yes。

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

日志显示您正在进行升级,因此将要安装的唯一功能与已安装的功能相同。

目前尚不清楚产品中有多少功能,但如果您始终希望在升级过程中安装所有功能,请将MigrateFeatures设置为否。

无论哪种方式,最好提供整个日志以查看发生了什么以及是否有其他解释。

答案 1 :(得分:1)

这个评论太长了,作为答案补充道。 只是一些事情

  1. 您绝对不应为任何MSI包设置REINSTALLMODE="amus"

    • 如果您在此设置中包含合并模块,则可以降级共享文件 - 即使您自己也没有写入共享位置。
    • 最好的是默认"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的{​​{1}}设置为WiX Feature element,重新编译并查看是否会改变这些内容。如果这是您唯一的功能,除了使用Phils建议设置"disallow"之外,我还会进行此更改。 为什么要删除您的唯一功能?

  3. 发生这个问题有点奇怪。也许您在MSI上运行了修改,只是在机器上的旧安装中选择了要卸载的功能?听起来不太可能 - 特别是如果它是你唯一的功能。

    • 您是否在相关计算机上安装了多个早期版本的产品,或者只有一个先前版本?

    • 同样,&#34;条件表&#34;中是否有条目?在编译的MSI? (使用Orca检查)。

    • 您是否更改了最新套餐中的功能名称?

  4. 无论如何,你应该能够修复&#34; 1)的破坏安装只需运行现有设置并将ADDLOCAL = ALL添加到msiexec.exe安装命令 - 我认为这将覆盖MigrateFeatureStates操作(不是真正的修复,只是一种解决方法)。或者 2)你可以禁用MigrateFeatureStates并重新编译设置 - 这应该永久修复, 3)如果我是你,我会设置MigrateFeatureStates to "No"Absent attributeWiX Feature element,以便您的(仅?)功能无法删除。

    Phil ,如果你看到这个,你知道日志中看到的MIGRATE属性是什么吗?它看起来像一些WiX特定的东西 - 除非它是来自MSI的升级表:

    "disallow"

    tandrasz :据我所知,FindRelatedProducts(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. )找到的两个GUID与您新设置的产品代码({{1}不同}})。这使它看起来像有两个相关的产品&#34;由FindRelatedProducts在相关机器上找到。 是否安装了相同MSI的两个旧版本,或者您是否拥有&#34;套件&#34;所有共享相同升级代码的MSI文件?。如果你有两个&#34;无关&#34;安装的软件包,也许MigrateFeatureStates没有办法在这两个软件包和你正在安装的新软件包之间迁移功能状态?

相关问题