[NSIS] Windows 버전 얻는 함수

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

		# check if Windows 10 family (CurrentMajorVersionNumber is new introduced in Windows 10)
		ReadRegStr $R0 HKLM \
		"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentMajorVersionNumber

		StrCmp $R0 '' 0 lbl_winnt

		ClearErrors

		# check if Windows NT family
		ReadRegStr $R0 HKLM \
		"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion

		IfErrors 0 lbl_winnt

		# we are not NT
		ReadRegStr $R0 HKLM \
		"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber

		StrCpy $R1 $R0 1
		StrCmp $R1 '4' 0 lbl_error

		StrCpy $R1 $R0 3

		StrCmp $R1 '4.0' lbl_win32_95
		StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98

		lbl_win32_95:
			StrCpy $R0 '95'
			Goto lbl_done

		lbl_win32_98:
			StrCpy $R0 '98'
			Goto lbl_done

		lbl_win32_ME:
			StrCpy $R0 'ME'
			Goto lbl_done

		lbl_winnt:
			StrCpy $R1 $R0 1

			StrCmp $R1 '3' lbl_winnt_x
			StrCmp $R1 '4' lbl_winnt_x

			StrCpy $R1 $R0 3

			StrCmp $R1 '5.0' lbl_winnt_2000
			StrCmp $R1 '5.1' lbl_winnt_XP
			StrCmp $R1 '5.2' lbl_winnt_2003
			StrCmp $R1 '6.0' lbl_winnt_vista
			StrCmp $R1 '6.1' lbl_winnt_7
			StrCmp $R1 '6.2' lbl_winnt_8
			StrCmp $R1 '6.3' lbl_winnt_81
			StrCmp $R1 '10' lbl_winnt_10 # CurrentMajorVersionNumber is a dword

			StrCpy $R1 $R0 4

			StrCmp $R1 '10.0' lbl_winnt_10 # This can never happen?
			Goto lbl_error

		lbl_winnt_x:
			StrCpy $R0 "NT $R0" 6
			Goto lbl_done

		lbl_winnt_2000:
			Strcpy $R0 '2000'
			Goto lbl_done

		lbl_winnt_XP:
			Strcpy $R0 'XP'
			Goto lbl_done

		lbl_winnt_2003:
			Strcpy $R0 '2003'
			Goto lbl_done

		lbl_winnt_vista:
			Strcpy $R0 'Vista'
			Goto lbl_done

		lbl_winnt_7:
			Strcpy $R0 '7'
			Goto lbl_done

		lbl_winnt_8:
			Strcpy $R0 '8'
			Goto lbl_done

		lbl_winnt_81:
			Strcpy $R0 '8.1'
			Goto lbl_done

		lbl_winnt_10:
			Strcpy $R0 '10.0'
			Goto lbl_done

		lbl_error:
			Strcpy $R0 ''

		lbl_done:

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

!macro GetWindowsVersion OUTPUT
	!ifndef __UNINSTALL__
		Call _GetWindowsVersion
	!else
		Call un._GetWindowsVersion
	!endif

	Pop "${OUTPUT}"
!macroend

!define GetWindowsVersion "!insertmacro GetWindowsVersion"

댓글

이 블로그의 인기 게시물

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

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