32位NSIS是否可以启动64位程序?

Ben*_*enj 6 windows installer nsis

我正在移植一个32位 - > 64位的Windows程序.它有一个32位安装程序,使用NSIS编写.我可以使用32位NSIS安装程序启动一个新的64位exes吗?我不认为有64位版本的NSIS ......

sas*_*ont 15

当然可以,NSIS不会施加任何限制,对于NSIS而言,如果您同时拥有32位和64位版本的应用程序,则可以执行组合安装程序,并在每个架构的基础上安装所需的文件.例如

!include "x64.nsh"

${If} ${RunningX64}
    File ..\x64\blah.exe
${Else}
    File ..\x86\blah.exe
${EndIf}
Run Code Online (Sandbox Code Playgroud)


Sha*_*men 12

NSIS使用两个Win32 API的执行过程ShellExecute(直通ExecShell)和CreateProcess(通ExecExecWait),他们都可以从NSIS 32个进程(如你在64位操作系统上运行,只要)运行64个程序(64位).

  • 哦,好吧,我认为不可能从 32 位进程创建一个 64 位进程。我有什么特别的事情要做吗? (2认同)

son*_*da1 5

为了执行需要 64 位操作的进程,我发现默认的 NSIS 执行不会在 64 位模式下自动运行。我在尝试运行 DISM 以安装 .NET Framework 3.5 时遇到了这个问题。DISM 会出错,说明:

“您无法使用 32 位版本的 DISM 为正在运行的 64 位操作系统提供服务。”

为了解决我添加需要DisableX64FSRedirection在需要 64 位操作的调用之前添加。请参阅以下示例:

${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}
Run Code Online (Sandbox Code Playgroud)