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

8
我想为我的NSIS安装程序添加对x64操作系统的支持。其中一个安装程序的任务是驱动程序安装。我已经为此编写了一个特殊的NSIS插件。该插件使用Driver Install Frameworks API (DIFxAPI)来安装驱动程序。
问题是这个API在WOW64中无法工作。
有没有办法使用NSIS创建x64安装程序应用程序?有没有人用NSIS解决过类似的问题?
附言:我现在唯一能想到的解决方案是从安装程序运行另一个应用程序。这将是安装驱动程序的x64可执行文件。但这种方式对我来说似乎有点困难。所以,我对其他解决方案感兴趣。
4个回答

13

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

这份文档似乎提供了使用DPInst的解决方案(http://www.microsoft.com/whdc/driver/install/32-64bit_install.mspx),不过我还没有自己尝试过。

如果我找到其他信息,我会添加的。

附加信息: 现在我已经让它正常工作,总结如下:

  1. 下载Windows Driver Kit Version 7.1.0
  2. 挂载ISO并安装完整的开发环境->工具到C:\
  3. C:\WinDDK\7600.16385.1\redist\DIFx/dpinst/EngMui/amd64/dpinst.exe复制到myApp/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. 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}


谢谢!我已经尝试使用dpinst,它对我很有效。 - Alex Che
1
好主意!这个链接有一个.zip文件的链接,其中包含dpinst的两个版本,这样你就不必下载整个WDK了。 - Vargas
另外需要注意的是,如果您要安装的驱动程序未经签名,请确保省略 /q 参数,因为它会自动选择不安装驱动程序并且不返回错误。未经签名的驱动程序消息将弹出,用户必须选择“仍然安装”选项。 - bsruth

2

目前,NSIS还没有原生的x64版本,所以您需要创建一些自定义内容,可以是新的帮助程序,也可以是64位版本的rundll32加上某种类型的帮助DLL文件。


2
我将尝试使用INF文件从NSIS安装程序在x64上安装文件系统过滤驱动程序。
在32位上,我可以很轻松地调用:
ExecWait '$SYSDIR\RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\<myinf>.inf'

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

我发现,为了使NSIS从x64正确运行RUNDLL32.EXE,你还需要将注册表视图设置为64位:

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

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

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接