Ошибка WiX DifxApp при установке пакета драйверов: не удалось получить службы, связанные с пакетом драйверов

Я пытаюсь установить драйвер Kernel Mini-Filter для Windows 7x64. Машина, на которой я тестирую программу установки, находится в тестовом режиме, и все файлы драйвера и файл .cat подписаны созданным мной сертификатом. Я выполнил инструкции ЗДЕСЬ, и мне все еще не удается установить драйвер. Я обязательно добавил DriverPackageType = FileSystemMinifilter в раздел [version] файла .inf.

Вот отрывок из моего xml-файла установщика WiX:

        <Directory Id="Driver" Name="Driver">
          <Component Id="MY-DRIVER-NAME" Guid="MY-GUID">
            <File
              Id="DRIVER_FILE1_SYS"
              Name="DriverFile1.sys"
              DiskId="1"
              Source="path_to_sys_file"
              Vital="yes"
              System="yes"
              ReadOnly="yes"
              KeyPath="yes"/>
            <File
              Id="DRIVER_FILE2_SYS"
              Name="DriverFile2.sys"
              DiskId="1"
              Source="path_to_sys_file"
              Vital="yes"
              System="yes"
              ReadOnly="yes"
              KeyPath="yes"/>
            <File
              Id="DRIVER_FILE3_SYS"
              Name="DriverFile3.sys"
              DiskId="1"
              Source="path_to_sys_file"
              Vital="yes"
              System="yes"
              ReadOnly="yes"
              KeyPath="yes"/>
            <File
              Id="DRIVER_FILE4_SYS"
              Name="DriverFile4.sys"
              DiskId="1"
              Source="path_to_sys_file"
              Vital="yes"
              System="yes"
              ReadOnly="yes"
              KeyPath="yes"/>
            <File
              Id="DRIVER_FILE_INF"
              Name="DriverFile.inf"
              DiskId="1"
              Source="path_to_inf_file"
              Vital="yes"
              System="yes"
              ReadOnly="yes"/>
            <File
              Id="DRIVER_FILE_CAT"
              Name="DriverFile.cat"
              DiskId="1"
              Source="path_to_cat_file"
              Vital="yes"
              System="yes"
              ReadOnly="yes"/>
            <difx:Driver Legacy="yes"/>
          </Component><!--LEGDriver-->

Пути «Id», «Name» и «Source» были изменены (на самом деле я не использую значения, показанные выше, это просто пример). У меня нет проблем со сборкой установщика. Когда я запускаю его с msiexec /i MyMsi.msi /l*v install.log, я вижу ошибку DIFXAPP: ERROR: Could not get services associated with driver package

Затем он пытается отменить изменения и обнаруживает еще несколько ошибок:

ERROR: Unable to revert to a previous driver store for service ''.
ERROR: Unable to open service '' to delete it because of error 0x7B

Файл .inf можно без проблем установить с помощью команды:

RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 path-to-inf\infname.inf

Он также успешно устанавливается с помощью «установки правой кнопкой мыши».

Добавление вышеупомянутой команды 'RUNDLL32.EXE' в ​​качестве настраиваемого действия ExeCommand в мой установщик WiX вместо использования DifxApp работает при установке файла .msi на машину вручную, однако при развертывании через GPO с сервера Active Directory (Per-Computer GPO ) установка не завершается. (Все, кроме INF, установка завершена).


person Sean    schedule 11.03.2014    source источник


Ответы (1)


Оказывается, ответ - модифицированная версия команды RUNDLL32.exe. Измените 132 на 131

RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 131 path-to-inf\infname.inf

Согласно http://msdn.microsoft.com/en-us/library/aa376957(v=vs.85).aspx

128 + 4 = 132 = Попросите пользователя перезагрузиться, если требуется 128 + 3 = 131 = Не спрашивайте, просто перезагрузитесь

Поскольку это развертывается из AD и устанавливается при загрузке до того, как какой-либо пользователь войдет в систему, я полагаю, что он терпит неудачу, когда программа пытается создать всплывающее окно, чтобы спросить, хочет ли пользователь завершить работу. Выполнение 131 заставляет его установить и перезагрузить компьютер, прежде чем пользователь сможет войти в систему. После того, как компьютер завершил двойную перезагрузку, можно приступать к работе.

person Sean    schedule 12.03.2014