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(通Exec和ExecWait),他们都可以从NSIS 32个进程(如你在64位操作系统上运行,只要)运行64个程序(64位).
为了执行需要 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)