Installing drivers from NSIS installer in x64 system

Alex Che picture Alex Che · Mar 17, 2010 · Viewed 9.7k times · Source

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.

Answer

Russell Gallop picture Russell Gallop · Apr 30, 2010

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}