[NSIS] Internet Explorer 버전 얻는 함수

# 호출 예
# ${GetIEVersion} '반환'
# ${GetIEVersion} $0

!macro _GetIEVersion un
	Function ${un}_GetIEVersion
		Push $R0
		Push $R1

		ClearErrors
		ReadRegStr $R1 HKLM "Software\Microsoft\Internet Explorer" "svcVersion" # IE 10, 11
		IfErrors FAIL_GET_svcVersion SUCCESS_GET_svcVersion
		SUCCESS_GET_svcVersion:
			${IndexOf} $R0 "." $R1

			StrCpy $R1 $R1 $R0
			Goto lbl_done

		FAIL_GET_svcVersion:

		ReadRegStr $R1 HKLM "Software\Microsoft\Internet Explorer" "Version" # IE 9 이하
		IfErrors lbl_123 lbl_456

		lbl_456: # ie 4+
			${IndexOf} $R0 "." $R1

			StrCpy $R1 $R1 $R0
			Goto lbl_done

		lbl_123: # older ie version
			ClearErrors
			ReadRegStr $R1 HKLM "Software\Microsoft\Internet Explorer" "IVer"
			IfErrors lbl_error

			StrCpy $R1 $R1 3
			StrCmp $R1 '100' lbl_ie1
			StrCmp $R1 '101' lbl_ie2
			StrCmp $R1 '102' lbl_ie2

			StrCpy $R1 '3' # default to ie3 if not 100, 101, or 102.
			Goto lbl_done
		lbl_ie1:
			StrCpy $R1 '1'
			Goto lbl_done
		lbl_ie2:
			StrCpy $R1 '2'
			Goto lbl_done
		lbl_error:
			StrCpy $R1 ''
		lbl_done:

		Push $R1
		Exch
		Pop $R1
		Exch
		Pop $R0
	FunctionEnd
!macroend
!insertmacro _GetIEVersion ""
!insertmacro _GetIEVersion "un."

!macro GetIEVersion OUTPUT
	!ifndef __UNINSTALL__
		Call _GetIEVersion
	!else
		Call un._GetIEVersion
	!endif

	Pop "${OUTPUT}"
!macroend

!define GetIEVersion "!insertmacro GetIEVersion"

댓글

이 블로그의 인기 게시물

[NSIS] 32비트와 64비트 모듈 등록하는 법. (regsvr32)

[Visual Studio] Windows 7 에서 Visual Studio 6.0 디버그 시 프로세스 좀비되는 증상 해결 방법