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