繁体   English   中英

WIX MSI perMachine安装程序将安装的属性写入HKCU而不是HKLM

[英]WIX MSI perMachine installer writing installed property to HKCU instead of HKLM

WIX MSI perMachine安装程序将安装的属性写入HKCU而不是HKLM。

其中一个症状是我用来检测安装旧版本产品的原始逻辑失败,因为我依赖于Installed属性来定义先前已执行安装的系统。 为了清楚这个逻辑在过去是有效的,但现在我正在进行回归测试,但它失败了。

我用orca编辑了msi并修改了测试它的启动条件。 我将启动条件更改为“已安装”,并将消息更改为“未安装”,然后在安装了应用程序的多个系统上运行安装程序。 如果Installed为true,则安装程序将运行,但在每种情况下,安装程序都会显示消息框,表示无法找到注册表项。

我查看了所有这些系统,“已安装”的注册表项位于HKCU / Software / company / product / installed = 1而不是HKLM。

这也是一个64位安装程序,当我运行安装程序时,它进入UI,我查看任务管理器,以确保它运行的是64位版本的msiexec。

这是停止工作的相关WIX片段。 查看第一次发射条件。 我正在添加Product ...部分的开头。

<Product Id="*"
 Name="$(var.ProductDisplayName)"
 Language="1033"
 Version="$(var.OurVersion)"
 Manufacturer="$(var.ProductAuthor)"
 UpgradeCode="$(var.ProductUpgradeCode)">
<Product Id="*"
 Name="$(var.ProductDisplayName)"
 Language="1033"
 Version="$(var.VayTekVersion)"
 Manufacturer="$(var.ProductAuthor)"
 UpgradeCode="$(var.ProductUpgradeCode)"
>

<Package
  Description="$(var.ProductDisplayName)"
  Comments="$(var.ProductDisplayComment)"
  Manufacturer="$(var.ProductAuthor)"
  InstallerVersion="301" Compressed="yes"
  Platform="$(var.Platform)"
  InstallScope="perMachine"
  InstallPrivileges="elevated"/>

<Upgrade Id="$(var.ProductUpgradeCode)">
<UpgradeVersion Minimum="$(var.OurVersion)"
    IncludeMinimum="no" 
    OnlyDetect="yes"   
    Property="NEWERPRODUCTFOUND" />
<UpgradeVersion
    Minimum="07.01.01001" IncludeMinimum="yes"
    Maximum="$(var.OurVersion)" IncludeMaximum="no"
    Property="PREVIOUSVERSIONSINSTALLED"/>
</Upgrade>

<InstallExecuteSequence>
  <RemoveExistingProducts After="InstallFinalize"/>
</InstallExecuteSequence>

<Condition 
    Message="A later version of the product is already installed. Setup  will now exit.">
    (NOT NEWERPRODUCTFOUND) OR (NOT Installed)
</Condition>

在我盯着代码一段时间后,我删除了“未安装”逻辑并离开了

NOT NEWERPRODUCTFOUND

这不是理想的,但它适用于大多数情况。

任何人都知道为什么注册表项被放置在错误的配置单元中?

ALLUSERS属性设置为“1”时,每台机器都有一个MSI包。 在WiX工具集中,您可以使用Package元素将InstallScope属性设置为“perMachine”来设置它。

此外,升级不会检测其他安装范围中的软件包。 换句话说,每台机器无法按用户升级,反之亦然。

PS:在LaunchCondition "NOT Installed"是一件非常奇怪的事情。 那只会试图阻止修复/卸载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM