2016-07-05 105 views
0

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

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

块,但我真的不知道如何获得OS信息那里。 任何想法?

+0

您需要详细说明“根据操作系统版本(例如,如果操作系统版本> XP并且如果<= XP时传递),我想要传递一部分安装并继续安装其他部件。”实际上是指。这太模糊了。你想要安装某些组件吗?你想要运行某些自定义操作吗?在这种情况下,什么是“安装的一部分”? –

+0

@BrianSutherland谢谢。编辑。现在清楚吗? –

+0

是=]我会更新我的答案 –

回答

0

你不想使用<?if ... ?>这些是预处理器指令,如#ifdef和#ifndef在C++中,只是确定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> 

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

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

+0

非常感谢!我会在明天检查我的情况。 –

+0

只是想知道,我应该怎么做,如果我有ComponentRef而不是通常的组件?应该解决方案是一样的吗?我的意思是在[步骤3]中添加条件(http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/add_a_file.html) –

+0

您还可以在功能级别上执行类似条件如果你不能修改元素本身。该功能可以被告知安装或不使用 STATEMENT。如果您查看wix的Condition页面,则不能在下使用它 –