NSIS生成的安装程序都是32位的应用程序,所以在x64下运行时,所安装的文件会被自动转向,如安装到C:\Windows\System32目录下的文件会被安装到C:\Windows\SysWOW64目录下。这对于有些软件是不方便的。
NSIS 已经有现成的头文件 x64.nsh (X:\NSIS\Include\x64.nsh) 供大家使用。首先需要引用
x64.nsh 里有三个宏:
RunningX64 : 检查运行环境是否是X64
DisableX64FSRedirection : 禁止文件转向
EnableX64FSRedirection : 允许文件转向
简单的测试代码:
可以读环境变量 PROCESSOR_ARCHITECTURE,该变量在 32 位系统为 x86,在 AMD 的 x64 的机器和在 Intel 的 x64 机器上为 AMD64,在安腾(Itanium)系统为 IA64。
2、注册COM组件,需包含 Library.nsh,用宏 InstallLib/UnInstallLib 代替 RegDLL/UnRegDLL
5、在 64 位系统上 $PROGRAMFILES64 表示“Program Files”, $PROGRAMFILES 表示 “Program Files (x86)”
可以在安装脚本的开始处定义一个常量:
以后直接用 ${PROGRAM_FILES_FIX} 代替 $PROGRAMFILES。
6、可以做个批处理文件,一次性生成 32位/64 位的安装包
参考资料:
NSIS在x64系统下的使用
NSIS生成的安装程序都是32位的应用程序,所以在x64下运行时,所安装的文件会被自动转向,如安装到C:\Windows\System32目录下的文件会被安装到C:\Windows\SysWOW64目录下。这对于有些软件是不方便的。一个办法是重新编译NSIS的代码为64位,就是有点麻烦,而且需要大量的时间测试一下。利用简单的代码也可以解决类似的问题:
1、检测操作系统是否为x64系统
可以读环境变量PROCESSOR_ARCHITECTURE,该变量在32位系统为x86,在AMD的x64的机器和在Intel的x64机器上为AMD64,在安腾(Itanium)系统为IA64。可以使用下面的代码:
ReadEnvStr $Win64 PROCESSOR_ARCHITECTURE
StrCmp $Win64 "x86" lbl_Win32
2、禁止文件转向
调用Wow64EnableWow64FsRedirection函数可以禁止或恢复文件转向。如:
; 禁止
System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 0)"
......
; 恢复
System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 1)"
http://www.cnblogs.com/zealsoft/archive/2005/05/25/162314.html
$PROGRAMFILES on x64
备注:本文转载自:
1、http://blog.youkuaiyun.com/yysyangyangyangshan/article/details/7172294