Wix4 语法/条件更改

问题描述 投票:0回答:1

我在生成的 MSI 文件中看到 Wix 3.14 和 Wix 4 之间的变化...

我有某些属性

  1. 我想继承以前的安装/注册表
  2. 允许用户在命令行上传递属性来覆盖以前的设置
  3. 如果条件 1 或 2 都不满足,则默认为其他值

假设我有一个 config.wxi 并且定义了一个如下变量:

<?define Absent = "#-9998" ?>

然后在product.wxs中我有:

<Property Id="MFATIMEOUT" Value="$(var.Absent)">
   <RegistrySearch Id="MFATimeOutSearch" Root="HKLM" Key="$(var.BaseRegistryKey)" Name="MFATimeOut" Type="raw" />
</Property>

在 Wix 3.14 下,如果尚未设置该值,则可以设置该值:

<SetProperty Id="MFATIMEOUT" Value="0" After="AppSearch" Condition='MFATIMEOUT="$(var.Absent)"' Sequence='first'/>

但是,在 Wix4 下,它不起作用......我在编辑字段中看到的是 -9998。 (在某些时候,对于数字,我会调整它们并在显示在安装程序对话框中之前删除 # 符号)。它向我表明 SetProperty 没有被调用,因为条件不满足。我确实修改了条件以将其设置为

'1 or (MFATIMEOUT="$(var.Absent)")'
并且它确实将值设置为 0,因为它的计算结果为 true。

但是,在 Wix4 下,我可以修改我的源代码,如果我编写原始条件,它将给出正确的值...

<SetProperty Id="MFATIMEOUT" Value="0" After="AppSearch" Condition='MFATIMEOUT=-9998' Sequence='first'/>

所以,我必须将在 Wix 3 中有效的条件:

'MFATIMEOUT="$(var.Absent)"'
更改为在 Wix4 中有效的新条件:
MFATIMEOUT=-9998

我很好奇我所拥有的不再起作用的地方发生了什么变化......这是我编码的方式吗

$(var.Absent)
?到底是什么?

后续:

另外,我注意到对于这种情况,如果我将 $var.Absent 的定义更改为

-9998
而不是
#-9998
,那么它就可以工作。我无法告诉你为什么最初它是
#-9998
,但只能是那样,因为它有效......这么多晦涩的 Wix 东西......

wix windows-installer
1个回答
0
投票

我在您提供的代码片段中没有看到任何在 WiX v3 到 WiX v4 中表现应有所不同的内容。

您正在搜索的注册表项的类型是否可能已更改?如果它不再是数字,Windows Installer 将不再在其前面添加 #。

© www.soinside.com 2019 - 2024. All rights reserved.