NSIS判断系统版本

本文介绍如何利用NSIS脚本判断安装程序运行时的系统版本,区分是X64还是X86架构。
Function "GetWinVer"
/*
;Push $R0
;Push $R1
ClearErrors
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_win7 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_win7:
Strcpy $R0 'win7'
Goto lbl_done

lbl_error:
Strcpy $R0 ''
lbl_done:*/

    ${WinVerGetMajor} $R0
    ${WinVerGetMinor} $R1
    ${WinVerGetBuild} $R2
    ${WinVerGetServicePackLevel} $R3


    ; determine windows product name
    ${If} $R0 == 5 
            ${If} $R1 == 0
                    MessageBox MB_OK "Windows 2000 SP $R3"
            ${ElseIf} $R1 == 1
                    MessageBox MB_OK "Windows XP SP $R3"
            ${ElseIf} $R1 == 2
                    MessageBox MB_OK "Windows Server 2003 SP $R3"
            ${EndIf}
    ${ElseIf} $R0 == 6
            ${If} $R1 == 0
                    ${If} ${IsServerOS}
                            MessageBox MB_OK "Windows Server 2008 SP $R3"
                    ${Else}
                            MessageBox MB_OK "Windows Vista SP $R3"
                    ${EndIf}
            ${ElseIf} $R1 == 1
                    ${If} ${IsServerOS}
                            MessageBox MB_OK "Windows Server 2008 R2 SP $R3"
                    ${Else}
                            MessageBox MB_OK "Windows 7 SP $R3"
                    ${EndIf}
            ${ElseIf} $R1 == 2
                    ${If} ${IsServerOS} 
                            MessageBox MB_OK "Windows Server 2012 SP $R3"
                    ${Else}
                            MessageBox MB_OK "Windows 8 SP $R3"
                    ${EndIf}
            ${ElseIf} $R1 == 3
                    ${If} ${IsServerOS}
                            MessageBox MB_OK "Windows Server 2012 R2 SP $R3"
                    ${Else}
                            MessageBox MB_OK "Windows 8.1 SP $R3"
                    ${EndIf}
            ${EndIf}
    ${EndIf}
    ; version
    MessageBox MB_OK "Kernel $R0.$R1 build $R2"
FunctionEnd


下面一段用来判断X64还是X86系统:

Function "IS64"
; x86 or x64:
    System::Call "kernel32::GetCurrentProcess() i .s"
    System::Call "kernel32::IsWow64Process(i s, *i .r0)"
    StrCmp $0 "0" is32bit is64bit
    is32bit:
			StrCpy $R5 "x86"
            ;MessageBox MB_OK  "32 bit"
            Goto exit
    is64bit:
		StrCpy $R5 "x64"
            ;MessageBox MB_OK  "64 bit"
    exit:
FunctionEnd


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值