我正在从 32 -> 64 位移植一个 Windows 程序。它有一个使用 NSIS 编写的 32 位安装程序。我可以使用 32 位 NSIS 安装程序启动我的新 64 位 exe 之一吗?我认为没有 64 位版本的 NSIS ......
5 回答
当然可以,NSIS 不会施加任何限制,NSIS 的真正妙处在于,如果您同时拥有 32 位和 64 位版本的应用程序,您可以执行组合安装程序,并在每个架构的基础上安装所需的文件。例如
!include "x64.nsh"
${If} ${RunningX64}
File ..\x64\blah.exe
${Else}
File ..\x86\blah.exe
${EndIf}
NSIS 使用两个 Win32 API 来执行进程ShellExecute
(thru ExecShell
) 和CreateProcess
(thru Exec
and ExecWait
),它们都可以从 NSIS 32 位进程运行 64 位进程 (x64)(只要您在 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}
只是为了添加更多描述性
看看, http://www.autoitscript.com/forum/index.php?showtopic=44048
嗯..这里有一些限制..例如,尝试运行 odbcconf.exe 来安装驱动程序。我还没有找到一种方法来让它作为 64 位条目出现。我认为就像您(在 64 位系统中)以管理员身份启动“powershell x86”,然后从那里运行 cmd 和 odbcconf 一样 - 我找不到简单的方法来解决它,让 odbcconf 执行 x64