我正在尝试根据操作系统
定义myUpgrade代码<?if VersionNT=601?>
<?define MyUpgradeCode="{GUIDFOR_WIN7}"?>
<?elseif VersionNT>=602?>
<?define MyUpgradeCode="{GUIDFOR_WIN8AND_LATER}"?>
<?endif?>
....
....
....
<Product Name="My Product"
Id="*"
UpgradeCode="$(var.MyUpgradeCode)"
Version=""
Language="1033"
>
但未能评估。
error CNDL0150: Undefined preprocessor variable '$(var.MyUpgradeCode)'. [C:\
Users\abc\Installer.wixproj]
如何根据要安装的Windows操作系统版本配置2 upgradeCodes ?
答案 0 :(得分:1)
如果它是64位计算机,那么您需要使用VERSIONNT64而不是VERSIONNT属性。
请问您为什么要更改基于操作系统的升级代码?如果您只是想避免维护2个不同版本的WXS文件,那么为什么不进行条件安装呢?如果Win7和Win8有特定的组件/功能,为什么不使用Condition Element将组件/功能标记为条件?
或者您可以根据提到的HERE
操作系统阻止整个安装<强> 更新 强>
<?define MyUpgradeCode ?>
<?if VersionNT=601?>
<?define MyUpgradeCode="{BF23D7DA-FE7D-446A-8950-3B92DD40FED3}"?>
<?elseif VersionNT>=602?>
<?define MyUpgradeCode="{3CA8F7F3-312B-4778-97CE-EE9B2C5453E6}"?>
<?endif?>
用上面的代码替换你的WXS,它会起作用。您首先定义变量,然后在IF / ElseIF代码中设置它的值。
现在要指出的一件重要事情是,在构建时评估WIX中的IF / Else和所有其他条件语句。因此,它将根据正在编译的机器/服务器的操作系统版本设置升级属性,而不是在其部署的位置。
条件语句的目的是允许您在构建时包含或排除一段xml。如果表达式的计算结果为true,则将包含该表达式。如果它的计算结果为false,则会被忽略。
在这里阅读更多相关信息。 WIX PRE PROCESSOR
答案 1 :(得分:0)
看起来您正在项目节点之外定义变量。当我使用WiX Setup-Editor时,我遇到了同样的错误,它可以像你的样本一样创建各种各样的变量。将定义移动到项目内部节点,然后上面的答案是正确的。