Установка драйверов из установщика NSIS в системе x64

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

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

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

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

4 ответов


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

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

добавит все, что я найду.

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

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

${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}

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


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


Я специально пытаюсь установить драйвер фильтра файловой системы на 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'