WiX - 安装依赖于操作系统的驱动程序

时间:2011-05-07 16:59:50

标签: wix

在安装过程中,我必须安装一个外部驱动程序,该驱动程序取决于PC的操作系统。我知道我可以为每个操作系统构建多个安装程序包,但我必须在一个安装程序中完成。这可能吗?

我的第一个问题是找出PC上存在哪个操作系统。通过以下条件?

<Condition Message="Your Operating system is ... .">
    VersionNT = 500
    <?define PCPlatform = "Win2000" ?>
    OR  VersionNT = 501
    <?define PCPlatform = "XP" ?>
    OR  VersionNT = 600
    <?define PCPlatform = "Vista" ?>
    OR  VersionNT = 601
    <?define PCPlatform = "Win7" ?>
</Condition>

然后如何告诉安装程序要执行哪个文件?

<Component Id="Win32_W2K" Guid="...">
    <File Id="vbsetup7" Source="..\driver\32Bit\W2K\vbsetup7.exe" Name="vbsetup7.exe" KeyPath="yes" DiskId="1"/>
</Component>
<Component Id="Win32_XP" Guid="...">
  <File Id="vbsetup7" Source="..\driver\32Bit\XP\vbsetup7.exe" Name="vbsetup7.exe" KeyPath="yes" DiskId="1"/>
</Component>
<Component Id="Win32_Vista" Guid="...">
  <File Id="vbsetup7" Source="..\driver\32Bit\Vista\vbsetup7.exe" Name="vbsetup7.exe" KeyPath="yes" DiskId="1"/>
</Component>
<Component Id="Win32_Win7" Guid="...">
  <File Id="vbsetup7" Source="..\driver\32Bit\Win7\vbsetup7.exe" Name="vbsetup7.exe" KeyPath="yes" DiskId="1"/>
</Component>
<CustomAction Id="Virtual_Driver" FileKey="vbsetup7" Execute="deferred" ExeCommand="" Return="check" Impersonate="no"/>

3 个答案:

答案 0 :(得分:6)

您必须向组件添加Condition。在运行时,Condition必须仅对其中一个组件元素求值为true,即条件必须互斥。类似的东西:

<Component Id="Win32_W2K" Guid="...">
    <Condition>VersionNT = 500</Condition>
    <File Id="vbsetup7" Source="..\driver\32Bit\W2K\vbsetup7.exe" Name="vbsetup7.exe" KeyPath="yes" DiskId="1"/>
</Component>

答案 1 :(得分:0)

你是如何安装驱动程序的?如果您使用的是DifxApp,那么您必须拥有多个安装程序,每个目标体系结构一个(x86 vs x64)。 Difxapp有wixlib可以让驱动程序安装变得非常简单。

答案 2 :(得分:0)

如果必须在“另一个”内部运行一个安装程序,可能会遇到问题,特别是如果第二个软件包也是基于Windows Installer的,因为Windows Installer(MSI)不支持“嵌套”安装。 MSI使用的一些资源实际上是全局的,因此内部安装可以在外部安装中进行操作。

更好的方法是使用一系列安装。在WiX中,这些称为bundles,由burn引导程序运行。您可以对bundle的每个元素应用条件,以便给定元素仅针对特定Windows版本(或Service Pack包级别,或x86 | x64,或者如果系统中存在或不存在某些其他包)运行,或者......安装条件可以像您一样灵活。)