在x64系统中从NSIS安装程序安装驱动程序

时间:2010-03-17 18:27:50

标签: 64-bit nsis drivers wow64

我想向我的NSIS安装程序添加对x64操作系统的支持。安装程序的任务之一是驱动程序安装。我为此任务编写了一个特殊的NSIS插件。此插件使用Driver Install Frameworks API (DIFxAPI)来安装驱动程序。

问题是这个API在WOW64中不起作用。

有没有办法用NSIS创建x64安装程序?有人解决了与NSIS类似的问题吗?

P.S。:我现在能看到的唯一解决方案是从安装程序运行另一个应用程序。这将是安装驱动程序的x64可执行文件。但这种方式对我来说似乎有点困难。所以,我对其他解决方案感兴趣。

4 个答案:

答案 0 :(得分:12)

我遇到了类似的问题,我认为目前唯一的解决方案是通过CreateProcess运行其他东西(64位)。

这个doc似乎有一个使用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.exemyApp/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. 的顶部
  8. myApp.nsi的安装部分的某处添加:
  9. ${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}
    

答案 1 :(得分:2)

NSIS的原生x64版本最多处于规划阶段,因此您必须创建自定义内容,新的帮助应用程序或64位版本的rundll32 +某种辅助DLL文件。

答案 2 :(得分:2)

我正在尝试使用INF文件从NSIS安装程序在x64上安装文件系统过滤器驱动程序。

在32位我很高兴地打电话:

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

但是......在x64上,即使使用$ {DisableX64FSRedirection}关闭了文件重定向,它仍然可以执行WOW64操作......

我发现为了让RUNDLL32.EXE在NSIS上的x64上正常工作,你还需要将注册表视图设置为64:

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

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

答案 3 :(得分:2)