我想向我的NSIS安装程序添加对x64操作系统的支持。安装程序的任务之一是驱动程序安装。我为此任务编写了一个特殊的NSIS插件。此插件使用Driver Install Frameworks API (DIFxAPI)来安装驱动程序。
问题是这个API在WOW64中不起作用。
有没有办法用NSIS创建x64安装程序?有人解决了与NSIS类似的问题吗?
P.S。:我现在能看到的唯一解决方案是从安装程序运行另一个应用程序。这将是安装驱动程序的x64可执行文件。但这种方式对我来说似乎有点困难。所以,我对其他解决方案感兴趣。
答案 0 :(得分:12)
我遇到了类似的问题,我认为目前唯一的解决方案是通过CreateProcess运行其他东西(64位)。
这个doc似乎有一个使用DPInst(http://www.microsoft.com/whdc/driver/install/32-64bit_install.mspx)的解决方案,虽然我还没有尝试过。
将添加我找到的任何其他内容。
其他: 现在已经开始工作了,归结为
C:\
C:\WinDDK\7600.16385.1\redist\DIFx/dpinst/EngMui/amd64/dpinst.exe
到myApp/drivers/dpinst64.exe
C:\WinDDK\7600.16385.1\redist\DIFx/dpinst/EngMui/x86/dpinst.exe
复制到myApp/drivers/dpinst32.exe
myApp/drivers
myApp.nsi
添加!include "x64.nsh"
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}
答案 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)