Драйвера Wix установить? - PullRequest
       31

Драйвера Wix установить?

0 голосов
/ 01 марта 2019

Доброе утро, прекрасные люди!

Мой системный администратор решил, что мы должны делать все с .msi, и я застрял, пытаясь создать проект wix для установки драйверов на основе .inf.

Я видел сообщение, в котором кратко объясняется, как это сделать, например:

WIX Установщик для драйвера принтера на основе INF

Однако мне бы очень хотелосьполный пример (весь файл slns), чтобы я понял структуру, которую мне нужно сделать.Прямо сейчас это даже не компилируется.Вот содержимое моего product.wxs (PS: извините за беспорядок форматирования):

  <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="DriversTest" Language="1033" Version="1.0.0.0" 
       Manufacturer="" UpgradeCode="8caa9c0d-c692-4aa6-9267-a13577f51cb6">
    <Package InstallerVersion="200" Compressed="yes" 
      InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is 
        already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="DriversTest" Level="1">
        <ComponentGroupRef Id="ProductComponents" />
    </Feature>
</Product>

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="DriversTest" />
        </Directory>
    </Directory>
</Fragment>

   <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
        <!-- TODO: Remove the comments around this Component element and the 
       ComponentRef below in order to add resources to this installer. -->
        <!-- <Component Id="ProductComponent"> -->
            <!-- TODO: Insert files, registry keys, and other resources 
            here. -->
        <!-- </Component> -->
         </ComponentGroup>
       </Fragment>
      </Wix>

           <Component Id="google-usb" Guid="{4fba0d21-64bb-458d-9b78-23aed7a39d14}" 
        Directory = "C:\drivers-folder\google">
         <difx:Driver Legacy='yes' />
          <File Id="Catalog" Name="androidwinusba64.cat" 
            Source="androidwinusba64.cat" />
            <File Id="Info" Name="android_winusb.inf" KeyPath="yes" 
            Source="android_winusb.inf" />
        </Component>
             <Component Id="google-usb" Guid="{4fba0d21-64bb-458d-9b78-23aed7a39d14}" Directory = "C:\drivers-folder\google">
           <difx:Driver Legacy='yes' />
            <File Id="Catalog" Name="androidwinusba64.cat" Source="androidwinusba64.cat" />
     <File Id="Info" Name="android_winusb.inf" KeyPath="yes" Source="android_winusb.inf" />
            </Component>

Затем я перехожу к пакетному файлу:

@ ECHO OFF

ECHO ------------ Генерация установки драйверов ----------------

"% WIX% bin \ свеча" -ext WixDifxAppExtension * .wxs -o obj \ "% WIX% bin \ light" -ext WixUIExtension -ext WixDifxAppExtension * .wixobj difxapp_x64.wixlib -o bin \ google-usb.msi

PAUSE

*23* Сбой из-за этой ошибки:

Product.wxs C: \ test \ DriversTest \ DriversTest \ DriversTest \ Product.wxs (32): ошибка CNDL0104: неверный исходный файл;подробно: Есть несколько корневых элементов.Строка 32, позиция 2. light.exe: ошибка LGHT0103: Системе не удается найти файл «* .wixobj» с типом «Источник».Нажмите любую клавишу для продолжения .,.

Я действительно мог бы использовать руку.Я абсолютно нуб в этом, и я думаю, что мне нужно некоторое руководство.Я сосу на XML.

1 Ответ

0 голосов
/ 11 марта 2019

Ваш XML плохо сформирован.Корневой элемент <Wix> должен быть последним тегом, закрытым внизу, но он закрыт довольно далеко перед концом файла.Вот почему компилятор жалуется на «множественные корневые элементы».

Если у вас есть редактор, который понимает XML и выполняет подсветку / раскраску синтаксиса, то это, вероятно, поможет вам исправить файл так, чтобы все было внутри<Wix> элемент.

Вот пример правильно сформированного исходного файла Wix.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
    <DirectoryRef Id="INSTALLDIRECTORY"/>
    <ComponentGroup Id="cgDeviceLayer" Directory="INSTALLDIRECTORY">
      <ComponentGroupRef Id="cgPostSharp"/>
      <ComponentGroupRef Id="cgReactiveAscom" />
      <ComponentGroupRef Id="cgPostSharpAspects" />
      <ComponentGroupRef Id="cgNLog" />
      <Component Id="cmpDeviceControlLayer" Guid="*" Win64="no">
        <File Id="filDeviceLayerAssembly"
              Source="$(var.DeviceLayer.TargetPath)"
              KeyPath="yes"
              Vital="yes"
              Assembly=".net"
              AssemblyApplication="filDeviceLayerAssembly" />
      </Component>
    </ComponentGroup>
    </Fragment>
</Wix>

Примечание: это не полное определение продукта, это один файл, взятыйиз большого установщика, который служит примером того, как весь контент должен находиться внутри тегов <Wix>.

...