【问题标题】:WIX condition only on Install not working仅在安装时 WIX 条件不起作用
【发布时间】:2015-09-17 09:56:24
【问题描述】:

我在产品标签中有以下内容:

<Property Id="LICENSEKEY" Admin="yes" Hidden="no">
  <RegistrySearch Id="RememberLicenseKey" Root="HKLM" Key="SOFTWARE\MyApp\key1\Settings" Name="LICENSEKEY" Type="raw"></RegistrySearch>
</Property>

<Condition Message="License key is required to proceed">LICENSEKEY AND NOT Installed</Condition>

我想要做的是将许可证密钥作为命令行参数传递给 msiexec,然后在注册表中设置它。如果密钥未通过,我想取消安装。因此,此检查只需要在安装时运行。但是,我添加的条件会在安装和卸载时导致弹出窗口。似乎无法弄清楚我做错了什么。

编辑: 我用以下条件进行了测试,它似乎在安装和卸载时都显示了消息:

<Condition Message="License key is required to proceed">NOT Installed</Condition>

【问题讨论】:

标签: wix windows-installer wix3.8


【解决方案1】:

Condition 元素的消息将在条件评估为 false 时显示,这意味着条件满足。

这在WiX Condition documentation 的消息属性描述中注明:

将该值设置为条件失败且必须终止安装时显示的文本。

要解决这个问题,只需将Condition中的逻辑运算符改为LICENSEKEY OR Installed

这是一个较晚的答案,但希望这对以后发现此问题的任何访问者有所帮助。

【讨论】:

    【解决方案2】:

    您可能需要阐明您的要求。该WiX源会搜索密钥,因此是否需要在命令行上传递它,否则您将取消安装(如您的帖子所述),或者如果该注册表搜索在注册表中找到它,是否可以使用它?目前,您的注册表搜索似乎覆盖了您在命令行中传递的任何内容,包括将其设置为 null,因此请使用详细日志进行检查。

    此外,我见过或使用的所有启动条件示例在实际条件文本周围都有一个 CDATA - 这可能是问题的一部分。

    我假设您在命令行或注册表中允许该键。因此,您的注册表搜索应该是另一个属性名称,我们称之为 REGKEY,因此它不会将您传递的 LICENSEKEY 设置为 null。然后,在搜索后立即设置属性(类型 51)自定义操作,将 LICENSEKEY 设置为 REGKEY,条件为 -Not LICENSEKEY-,因此仅当 LICENSEKEY 未在命令行上传递时,它才会将 LICENSEKEY 设置为 REGKEY。因此,如果您在命令行上传递它,它将被使用,否则将使用注册表。此时,LICENSEKEY 的条件应该可以作为启动条件。在内部,找到注册表项的 AppSearch 通常紧跟在 WiX MSI 中的启动条件检查之后,因此您需要在启动条件检查之前设置 LICENSEKEY。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2014-11-04
      相关资源
      最近更新 更多