WIX:定义在我的 .wxs 文件中不起作用
WIX: define not working in my .wxs file
我正在尝试根据 OS
定义 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]
如何配置 2 upgradeCodes 基于要安装的 Windows OS 版本?
如果是 64 位机器,则需要使用 VERSIONNT64 instead of the VERSIONNT 属性。
请问为什么要根据操作系统更改升级代码?如果您只是想避免维护 2 个不同版本的 WXS 文件,为什么不直接进行条件安装呢?如果有特定的 components/features 去 Win7 和 Win8 为什么不使用 Condition Element 将 components/features 标记为有条件的?
或者您可以根据提到的操作系统阻止整个安装 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 代码中设置它的值。
现在要指出的一件重要事情是 IF/Else 和 WIX 中的所有其他条件语句都是在构建时评估的。因此,它将根据正在编译的 machine/server 的 OS 版本而不是部署位置来设置升级 属性。
The purpose of the conditional statement is to allow you to include or exclude a segment of xml at build time. If the expression evaluates to true, it will be included. If it evaluates to false, it will be ignored.
在此处阅读更多相关信息。 WIX PRE PROCESSOR
看起来您正在项目节点外定义您的变量。我在使用 WiX Setup-Editor 时遇到了同样的错误,它创建了各种变量,就像在您的示例中一样。将定义移动到项目节点内部,然后上面的答案是正确的。
我正在尝试根据 OS
定义 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]
如何配置 2 upgradeCodes 基于要安装的 Windows OS 版本?
如果是 64 位机器,则需要使用 VERSIONNT64 instead of the VERSIONNT 属性。
请问为什么要根据操作系统更改升级代码?如果您只是想避免维护 2 个不同版本的 WXS 文件,为什么不直接进行条件安装呢?如果有特定的 components/features 去 Win7 和 Win8 为什么不使用 Condition Element 将 components/features 标记为有条件的?
或者您可以根据提到的操作系统阻止整个安装 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 代码中设置它的值。
现在要指出的一件重要事情是 IF/Else 和 WIX 中的所有其他条件语句都是在构建时评估的。因此,它将根据正在编译的 machine/server 的 OS 版本而不是部署位置来设置升级 属性。
The purpose of the conditional statement is to allow you to include or exclude a segment of xml at build time. If the expression evaluates to true, it will be included. If it evaluates to false, it will be ignored.
在此处阅读更多相关信息。 WIX PRE PROCESSOR
看起来您正在项目节点外定义您的变量。我在使用 WiX Setup-Editor 时遇到了同样的错误,它创建了各种变量,就像在您的示例中一样。将定义移动到项目节点内部,然后上面的答案是正确的。