我正在从 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 Execand 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