2009-11-09 78 views
5

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

回答

11

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

+0

噢好吧,我不认为有可能创建一个32位的64位进程。有什么特别的我需要做的? – Benj 2009-11-09 12:08:55

+0

@Benj AFAIK,no。 – 2009-11-09 12:28:48

15

当然你可以,NSIS不会强加任何限制,如果你有32位和64位版本的应用程序,你可以做一个组合安装程序,然后安装所需的文件架构的基础。例如

!include "x64.nsh" 

${If} ${RunningX64} 
    File ..\x64\blah.exe 
${Else} 
    File ..\x86\blah.exe 
${EndIf} 
+0

嗨,我知道这是旧的,但我已经试过这个,它似乎仍然安装32bit.exe,如果我尝试这种方法。为什么哦为什么? – 2011-12-18 23:09:17

+0

@DanielCasserly不应该有什么神奇的 - 这是我仍在使用的代码。当我第一次构建我的安装程序时,它从NSIS网站上的示例中抓取 – saschabeaumont 2012-01-09 08:47:27

0

嗯..这里有一些限制..例如,尝试运行 odbcconf.exe安装驱动程序。我一直无法找到一种让64位入门的方法。 同样的方式,我认为,如果你(在64位系统)启动“PowerShell的86”以管理员身份,然后运行CMD和odbcconf从那里 - 没有简单的方法来解决它,我可以找到,使得odbcconf做64

2

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

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

解决我添加需要在需要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} 
相关问题