32位NSIS可以启动64位程序吗?
我正在从32-> 64位移植一个Windows程序。它有一个使用NSIS编写的32位安装程序。我可以使用32位NSIS安装程序启动我的新的64位exes中的一个吗?我不认为这是NSIS的64位版本的...32位NSIS可以启动64位程序吗?
NSIS使用两个Win32 API的执行过程ShellExecute
(直通ExecShell
)和CreateProcess
(直通Exec
和ExecWait
),他们都可以运行64个进程(x64)从NSIS 32位进程(只要您在64位操作系统上运行)。
当然你可以,NSIS不会强加任何限制,如果你有32位和64位版本的应用程序,你可以做一个组合安装程序,然后安装所需的文件架构的基础。例如
!include "x64.nsh"
${If} ${RunningX64}
File ..\x64\blah.exe
${Else}
File ..\x86\blah.exe
${EndIf}
嗨,我知道这是旧的,但我已经试过这个,它似乎仍然安装32bit.exe,如果我尝试这种方法。为什么哦为什么? – 2011-12-18 23:09:17
@DanielCasserly不应该有什么神奇的 - 这是我仍在使用的代码。当我第一次构建我的安装程序时,它从NSIS网站上的示例中抓取 – saschabeaumont 2012-01-09 08:47:27
嗯..这里有一些限制..例如,尝试运行 odbcconf.exe安装驱动程序。我一直无法找到一种让64位入门的方法。 同样的方式,我认为,如果你(在64位系统)启动“PowerShell的86”以管理员身份,然后运行CMD和odbcconf从那里 - 没有简单的方法来解决它,我可以找到,使得odbcconf做64
为了执行需要64位操作的进程,我发现默认的NSIS执行不会自动运行在64位模式下。我在尝试运行DISM以安装.NET Framework 3.5时遇到此问题。 DISM将错误地指出:
“您无法使用DISM的32位版本的 服务正在运行的64位操作系统。”
解决我添加需要在需要64位操作的调用之前添加DisableX64FSRedirection
。看下面的例子:
${If} ${RunningX64}
${DisableX64FSRedirection}
DetailPrint "Disabling Windows 64-bit file system redirection"
${EndIf}
nsExec::ExecToStack 'Dism.exe /Online /Enable-Feature /FeatureName:NetFx3'
${If} ${RunningX64}
${EnableX64FSRedirection}
DetailPrint "Re-enabling Windows 64-bit file system redirection"
${EndIf}
噢好吧,我不认为有可能创建一个32位的64位进程。有什么特别的我需要做的? – Benj 2009-11-09 12:08:55
@Benj AFAIK,no。 – 2009-11-09 12:28:48