본문으로 바로가기

출처: http://www.indidev.net/forum/viewtopic.php?t=69

UNICODE NSIS 설치

http://www.scratchpaper.com/
https://nsis.sourceforge.io/Download

 

WIN95/98을 지원하지 않는다고 할 때 UNICODE NSIS를 사용하면 설치파일의 다국어 지원 등에
매우 유리합니다. 물론 64비트 OS 는 전부 유니코드 지원 OS 죠.

Program files 폴더

nsis 에서 program files 폴더 변수는 $PROGRAMFILES입니다.
그런데 64비트 os에서는 $PROGRAMFILES는 program files (x86) 이 되어 버리죠.
64비트용 프로그램을 program files에 설치하고 싶으면 $PROGRAMFILES64 사용하면 됩니다.
$PROGRAMFILES64 변수는 32비트 os에서도 program files입니다.

레지스트리 접근

64비트 os는 32비트용 프로그램이 직접적으로 64비트 os 용 레지스트리에 접근하는 걸 막습니다.
마찬가지로 nsis 스크립트의 설치파일도 그냥 쓰면 64비트용 레지스트리에 접근이 안되기 때문에
64비트용 레지스트리에 접근하기 위해서는

SetRegView 64

 

를 써 줘야만 합니다.

런타임에 64비트 os 여부 확인

32비트 바이너리와 64비트 바이너리를 한 설치파일에 집어넣고자 할 경우가 있습니다.
이런 경우 런타임에 현재 os 가 64 비트인지 아닌지 확인하려면 다음과 같은 방식으로 코드를 사용하면 됩니다.

; 64비트 여부 체크하기  
System::Call "kernel32::GetCurrentProcess() i .s"
System::Call "kernel32::IsWow64Process(i s, *i .r0)"
StrCmp $0 '0' Win32 Win64
Win32:
   File /oname=name.exe  name32.exe
   Goto EndCheck
Win64:
   File /oname=name.exe  name64.exe
EndCheck: