您的位置:首页 > 其它

NSIS 制作 64 位系统下的安装程序

2012-12-04 11:27 330 查看
NSIS 已经有现成的头文件 x64.nsh (X:\NSIS\Include\x64.nsh) 供大家使用。首先需要引用

!include "x64.nsh"


x64.nsh 里有三个宏:

RunningX64 : 检查运行环境是否是X64

DisableX64FSRedirection : 禁止文件转向

EnableX64FSRedirection : 允许文件转向

简单的测试代码:

!include x64.nsh

Function .onInit
${If} ${RunningX64}
${EnableX64FSRedirection}
${else}
MessageBox MB_OK "Sorry this application runs only on x64 machines"
Abort
${EndIf}
FunctionEnd

Section -
Detailprint '$SYSDIR'
DetailPrint '$WINDIR'
DetailPrint '$PROGRAMFILES'
SectionEnd


1、检测操作系统是否为 x64 系统
可以读环境变量 PROCESSOR_ARCHITECTURE,该变量在 32 位系统为 x86,在 AMD 的 x64 的机器和在 Intel 的 x64 机器上为 AMD64,在安腾(Itanium)系统为 IA64。

ReadEnvStr $Win64 PROCESSOR_ARCHITECTURE
StrCmp $Win64 "x86" lbl_Win32


2、注册COM组件,需包含 Library.nsh,用宏 InstallLib/UnInstallLib 代替 RegDLL/UnRegDLL

; RegDLL "$SYSDIR\ComName.dll"
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED "LocalPath\ComName.dll" "$SYSDIR\ComName.dll" $SYSDIR
; UnRegDLL "$SYSDIR\ComName.dll"
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED "$SYSDIR\ComName.dll"


3、在调用涉及注册表的函数前用 SetRegView 64,后用 SetRegView lastused

!ifdef LIBRARY_X64
SetRegView 64
!endif
WriteRegStr ...
WriteRegStr ...
WriteRegStr ...
!ifdef  LIBRARY_X64
SetRegView lastused
!endif


4、在调用涉及目标机器上系统目录(即 $SYSDIR)的函数前用 {DisableX64FSRedirection}

5、在 64 位系统上 $PROGRAMFILES64 表示“Program Files”, $PROGRAMFILES 表示 “Program Files (x86)”

可以在安装脚本的开始处定义一个常量:

!ifdef LIBRARY_X64
!define PROGRAM_FILES_FIX  $PROGRAMFILES64
!else
!define PROGRAM_FILES_FIX  $PROGRAMFILES
!endif
以后直接用 ${PROGRAM_FILES_FIX} 代替 $PROGRAMFILES。

6、可以做个批处理文件,一次性生成 32位/64 位的安装包

makensis .\myinstaller.nsi
makensis /DLIBRARY_X64 .\myinstaller.nsi    ; 使用 /D 参数
pause


备注:本文转载自:

1、/article/1419555.html

2、http://blog.sina.com.cn/s/blog_617c05b001015hbn.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: