检查条件并使用Wix Toolset继续安装

时间:2016-07-05 19:02:01

标签: installation wix windows-installer install

我有一个 .wxs 文件用于程序安装。我希望根据操作系统版本传递部分安装(例如,如果操作系统版本> XP则执行,如果< = XP则传递)并继续安装其他部分。这意味着我已经安装了一些组件,并且在安装过程中想要检查(根据当前的操作系统),我是否应该安装下一个组件。如果是 - 安装,如果不是 - 应该跳过组件的安装。当然,完全安装后应该继续。我不想中止安装并删除已安装的组件,只需跳过一个组件。我该怎么做? 另外,我发现了这个link。有一个块安装案例,但我希望在条件之后继续安装。 还有另一个假设 - 我们可以使用

  

<?if *condition* ?> ... <?endif?>

块,但我真的不明白如何在那里获取操作系统信息。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您不想使用<?if ... ?>这些是预处理程序指令,如c ++中的#ifdef和#ifndef,只是确定是否包含if之间的部分以进行编译。这只会在构建机器上的构建时进行评估。

这样的操作会阻止您的安装在Windows XP或更早版本的计算机上运行。

<Condition Message="!(loc.OSNotSupported)">Installed OR VersionNT &gt; 501 OR VersionNT64 &gt; 501</Condition>

可以使用类似的条件来指示是否安装了组件,安装了某个功能,或者是否运行了自定义操作。

如果您更新问题并对此答案发表评论,我会尝试更新我的答案,以便更好地回答您的问题。

<小时/>

要根据您运行的计算机的操作系统安装某些组件非常简单,只需将以下内容添加到<component>

<Component Id="InstallMeOnXP" Guid="*">
    <Condition>VersionNT &lt;= 501 OR VersionNT64 &lt;= 501</Condition>
    <File Id="XPOnly.dll" KeyPath="yes" Source="$(var.BinariesDir)\_bin\XPOnly.dll" />
</Component>

如果条件评估为TRUE,则将安装组件,否则将不会安装。有关wix中Condition元素的更多信息。

以下是有关Windows Installer的默认VersionNTVersionNT64属性的信息。