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