WiX - установите драйвер, который зависит от ОС - PullRequest
3 голосов
/ 07 мая 2011

Во время установки мне нужно установить внешний драйвер, который зависит от операционной системы ПК. Я знаю, что могу собрать несколько пакетов установщика для каждой ОС, но я должен сделать это в одном установщике. Это возможно?

Моя первая проблема - выяснить, какая операционная система существует на ПК. Через условие, подобное следующему?

<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 ]

6 голосов
/ 07 мая 2011

Вы должны добавить 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>
0 голосов
/ 10 февраля 2013

Могут возникнуть проблемы, если вам нужно запустить один установщик «внутри» другого, особенно если второй пакет также основан на установщике Windows, поскольку установщик Windows (MSI) не поддерживает «вложенные» установки.Некоторые из ресурсов, с которыми работает MSI, фактически глобальны, поэтому внутренняя установка может нарушить внешнюю установку в процессе.

Лучшим подходом является использование цепочки установок.В WiX они называются связками и управляются загрузчиком burn.Вы можете применить условия к каждому элементу пакета, чтобы данный элемент запускался только для определенной версии Windows (или уровня пакета обновления, или x86 | x64, или если какой-либо другой пакет присутствует или отсутствует в системе,или ... Условия установки могут быть настолько гибкими, насколько вам нужно).

0 голосов
/ 09 мая 2011

Как вы устанавливаете драйверы?Если вы используете DifxApp, то вам потребуется более одного установщика, по одному для каждой целевой архитектуры (x86 против x64).Существуют wixlibs для Difxapp, которые значительно упрощают установку драйверов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...