WIX条件仅在安装不工作时

时间:2015-09-17 09:56:25

标签: wix windows-installer wix3.8

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

<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>

2 个答案:

答案 0 :(得分:1)

当条件评估为 false 时,将显示Condition元素的消息,表示条件

WiX Condition documentation中的消息属性说明中注明了这一点:

  

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

要解决此问题,条件中的逻辑运算符只需更改为LICENSEKEY OR Installed

这是一个迟到的答案,但希望这将有助于任何未来的访问者找到这个问题。

答案 1 :(得分:0)

您可能需要澄清您的要求。那个WiX源会搜索密钥,所以它需要在命令行上传递,或者你取消安装(如你的帖子所说),或者如果它在注册表搜索注册表?目前看来,您的注册表搜索会覆盖您在命令行上传递的任何内容,包括将其设置为null,因此请使用详细日志进行检查。

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

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