이것저것/My_Work

[NSIS] - OS Check (64bit & 32bit)

우담바라 2014. 4. 10. 11:52

NSIS 를 이용하서설치 파일을 만들경우 유용한 팁.

 

; 64비트 여부 체크하기
System::Call "kernel32::GetCurrentProcess() i .s"
System::Call "kernel32::IsWow64Process(i s, *i .r0)"
StrCmp $0 '0' Win32 Win64
Win32:
Goto EndCheck
Win64:
SetRegView 64 ;64비트 os에, 32비트용 프로그램이 접근 하기 위해서 사용

EndCheck:

 

 

추가.

동일 프로그램 설치 여부르 체크 (중복체크방지)

 

Function .onInit ; 플러그인 초기화를 합니다
InitPluginsDir
${nsProcess::KillProcess} "appname.exe" $R0

 

   ; 64비트 여부 체크하기
   System::Call "kernel32::GetCurrentProcess() i .s"
   System::Call "kernel32::IsWow64Process(i s, *i .r0)"
   StrCmp $0 '0' Win32 Win64
   Win32:
      Goto EndCheck
   Win64:
         SetRegView   64
   EndCheck:

 

   Call CheckVCRedist
   Pop $R0
   StrCmp $R0 "not found" Start 0
   MessageBox MB_OK|MB_ICONSTOP "동일 프로그램이 이미 설치 되어있습니다."    ; 팝업메시지 출력
   Abort


Start:            ; 설치 여부 확인(레지스트리 값 이용)
;ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\appname" "UninstallString"
FunctionEnd

 

 

Function CheckVCRedist
   Push $R0
   ClearErrors
   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\appname" "UninstallString"
  
   IfErrors 0 VSRedistInstalled
   StrCpy $R0 "not found"

VSRedistInstalled:
   Exch $R0
FunctionEnd