Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Installing drivers from NSIS installer in x64 system

I want to add support for x64 OSes to my NSIS installer. One of the installer's task is drivers installation. I've written a special NSIS plugin for this task. This plugin uses Driver Install Frameworks API (DIFxAPI) to install drivers.

The problem is that this API does not work in WOW64.

Is there any way to create x64 installer application with NSIS? Has anybody solved similar problem with NSIS?

P.S.: The only solution I can see now is to run another application from the installer. This will be x64 executable that installs drivers. But this way seems somewhat harder to me. So, I'm interested in other solutions.

like image 744
Alex Che Avatar asked Mar 17 '10 18:03

Alex Che


1 Answers

I am encountering a similar problem and I think that the only solution at the moment is to run something else (64bit) via CreateProcess.

This doc appears to have a solution using DPInst (http://www.microsoft.com/whdc/driver/install/32-64bit_install.mspx) though I have not tried it myself yet.

Will add anything else I find.

Additional: Have now got it to work, boils down to

  1. Download Windows Driver Kit Version 7.1.0
  2. Mount the ISO and install Full Development Environment->Tools to C:\
  3. Copy C:\WinDDK\7600.16385.1\redist\DIFx/dpinst/EngMui/amd64/dpinst.exe to myApp/drivers/dpinst64.exe
  4. Copy C:\WinDDK\7600.16385.1\redist\DIFx/dpinst/EngMui/x86/dpinst.exe to myApp/drivers/dpinst32.exe
  5. Copy your driver package (inf file etc.) to myApp/drivers
  6. To the top of myApp.nsi add !include "x64.nsh"
  7. And somewhere in the install section in myApp.nsi add:

${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}
like image 122
Russell Gallop Avatar answered Oct 07 '22 17:10

Russell Gallop