我在生成的 MSI 文件中看到 Wix 3.14 和 Wix 4 之间的变化...
我有某些属性
假设我有一个 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 v3 到 WiX v4 中表现应有所不同的内容。
您正在搜索的注册表项的类型是否可能已更改?如果它不再是数字,Windows Installer 将不再在其前面添加 #。