Установка драйверов из установщика NSIS в системе x64 - PullRequest
8 голосов
/ 17 марта 2010

Я хочу добавить поддержку операционных систем x64 в мой установщик NSIS. Одна из задач установщика - установка драйверов. Я написал специальный плагин NSIS для этой задачи. Этот плагин использует Driver Install Frameworks API (DIFxAPI) для установки драйверов.

Проблема в том, что этот API не работает в WOW64.

Есть ли способ создать приложение установщика x64 с NSIS? Кто-нибудь решил подобную проблему с NSIS?

P.S .: Единственное решение, которое я вижу сейчас, - это запустить другое приложение из установщика. Это будет исполняемый файл x64, который устанавливает драйверы. Но этот путь кажется мне несколько сложнее. Итак, меня интересуют другие решения.

Ответы [ 4 ]

12 голосов
/ 30 апреля 2010

Я сталкиваюсь с подобной проблемой и думаю, что на данный момент единственное решение - запустить что-то другое (64-битное) через CreateProcess.

У этого документа, похоже, есть решение с использованием DPInst (http://www.microsoft.com/whdc/driver/install/32-64bit_install.mspx), хотя я сам еще не пробовал.

Добавлю что-нибудь еще, что найду.

Дополнительно: Теперь получил его на работу, сводится к

  1. Загрузить комплект драйверов Windows версии 7.1.0
  2. Смонтируйте ISO и установите полную среду разработки-> Инструменты на C:\
  3. Копировать C:\WinDDK\7600.16385.1\redist\DIFx/dpinst/EngMui/amd64/dpinst.exe до myApp/drivers/dpinst64.exe
  4. Копировать C:\WinDDK\7600.16385.1\redist\DIFx/dpinst/EngMui/x86/dpinst.exe в myApp/drivers/dpinst32.exe
  5. Скопируйте ваш пакет драйверов (inf-файл и т. Д.) В myApp/drivers
  6. В начало myApp.nsi добавить !include "x64.nsh"
  7. И где-то в разделе установки в myApp.nsi добавить:

<code>${If} ${RunningX64}
       ExecWait '"$INSTDIR\drivers\dpinst64.exe" /c /q /sa /sw /PATH 
"$INSTDIR\drivers"'
    ${Else}
       ExecWait '"$INSTDIR\drivers\dpinst32.exe" /c /q /sa /sw /PATH 
"$INSTDIR\drivers"'
    ${EndIf}
2 голосов
/ 20 июня 2012

Только для справки: https://bitbucket.org/dgolub/nsis64

2 голосов
/ 22 марта 2011

Я специально пытаюсь установить драйвер фильтра файловой системы на x64 из установщика NSIS, используя INF-файл.

На 32 битах я могу довольно счастливо позвонить:

ExecWait '$SYSDIR\RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\<myinf>.inf'

Но ... на x64, даже если перенаправление файлов отключено с помощью $ {DisableX64FSRedirection}, оно все равно делает WOW64 ...

Я обнаружил, что для правильной работы RUNDLL32.EXE на x64 из NSIS необходимо также установить представление реестра на 64:

    ${If} ${RunningX64}
        ${DisableX64FSRedirection}
        SetRegView 64
    ${EndIf}

    ExecWait '$SYSDIR\RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\<myinf>.inf'
2 голосов
/ 18 марта 2010

Собственная x64-версия NSIS в лучшем случае находится на стадии планирования, поэтому вам придется создать что-то нестандартное, либо новое вспомогательное приложение, либо 64-разрядную версию rundll32 + некоторый вспомогательный DLL-файл.

...