8

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

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

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

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

4

4 回答 4

13

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

该文档似乎有一个使用 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.exemyApp/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}

于 2010-04-30T14:44:34.387 回答
2

NSIS 的原生 x64 版本充其量处于规划阶段,因此您必须创建一些自定义的东西,要么是新的帮助应用程序,要么是 64 位版本的 rundll32 + 某种帮助 DLL 文件。

于 2010-03-17T21:03:29.403 回答
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'
于 2011-03-22T09:37:55.923 回答
2

仅供参考:https ://bitbucket.org/dgolub/nsis64

于 2012-06-20T10:01:53.793 回答