有时我们用NSis 打包EXE的时候需要获取操作系统的版本,我们可以参考下面的函数
& X' D f9 u( b _2 M; j
- Z8 ^( T' ?) C4 k3 i% M& n4 I- x3 I调用方式:
! g4 I; A' m. ^ y5 g+ i5 T) x
( O: P- A9 u5 P t2 U9 ?1 Wcall GetWindowsVersion
& z" N2 q+ Z, f- {; O1 k6 ^+ u& F Pop $R09 M; L6 J# y) b V0 }4 k! \# I& L
6 t& \4 W2 @( o+ y" m
5 l2 E/ C r9 `0 G;获取操作系统类型
% d% O, I; N' a6 uFunction GetWindowsVersion
" Y( {& [! _# N8 BPush $R0
, D% z2 }* h+ p6 i4 S! IPush $R14 I$ [; d2 ]- M, }; q% I
ClearErrors. T5 h5 Y0 j, ^- _4 G# ~& `! {
ReadRegStr $R0 HKLM \
* j$ C1 @4 J8 N' l1 T9 s7 N"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
) S# k) j$ |# v0 s4 f$ w/ l. o5 @# w9 yIfErrors 0 lbl_winnt
' N, Z* _0 M/ x/ w( j; we are not NT! m; F- I' L+ J& D1 W+ \% [) V
ReadRegStr $R0 HKLM \4 U$ D5 ~4 O5 T4 [( C
"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber- I! x3 k( V, q
" u4 i" U" F* r& j [3 XStrCpy $R1 $R0 1. E! e- ^; [2 y( {$ q0 Q8 S, D
StrCmp $R1 '4' 0 lbl_error" ~# \5 w# w7 _/ [5 M. Q( F$ ?: C' k, D
# X) W0 k2 h: M7 p9 W6 e2 ^) v5 `6 g, }StrCpy $R1 $R0 35 d- b a9 V& L% x7 B6 k4 L
2 X+ l0 F% z4 o# m! X; E9 S. s, J
StrCmp $R1 '4.0' lbl_win32_95
! a# \- U( v5 c( A5 ]7 \2 N1 IStrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
+ r6 p3 g/ V$ d) ]' N2 |3 ^9 h. N2 ^- L
lbl_win32_95:' U! V9 j6 {, E, l7 `
StrCpy $R0 '95'6 d2 e1 `, k. B0 \
Goto lbl_done
0 w {/ x& @4 E, B# p* f. d/ d# d. D7 s2 Y1 [: c
lbl_win32_98:/ W' ~& V$ w/ n8 D6 G) W
StrCpy $R0 '98'
m0 O. N) s+ LGoto lbl_done
) u" e. _" [: \8 ^0 I9 E% v' s; c
( Q4 t. b" g- k4 ]2 Albl_win32_ME:
r6 F: Y, B w& C n7 tStrCpy $R0 'ME'* ?9 v! a! `4 \0 Y; v
Goto lbl_done7 }; j( r4 Y; l
- ]7 d. P# p2 d) j2 z9 h5 V& Mlbl_winnt:7 f0 o3 s+ S* ~* m- a
z ^7 Y& o5 D* u$ S _
StrCpy $R1 $R0 1 X$ s& e! y" V- a: I3 l# Z6 d
& B$ Q; ]7 K3 p# t% N# K+ HStrCmp $R1 '3' lbl_winnt_x
! U+ ]# S, v) sStrCmp $R1 '4' lbl_winnt_x
# q8 P: E( A& m5 j9 q1 i. z* ?7 v5 l/ C4 j* ?
StrCpy $R1 $R0 3
8 ^/ P$ S; Z& H1 u
) S4 j! u( h1 _" P7 Y- l5 QStrCmp $R1 '5.0' lbl_winnt_2000* t0 Q4 R9 ], J# k+ S& e: D( T) ]7 u
StrCmp $R1 '5.1' lbl_winnt_XP5 c% q( L/ |$ ]' o; H% Y
StrCmp $R1 '5.2' lbl_winnt_2003
$ v0 A; h6 U4 O+ V( f" ]1 d0 t$ KStrCmp $R1 '6.0' lbl_winnt_vista
2 W7 z, U2 T4 `3 z# \
; l' }1 U' k% l2 uStrCmp $R1 '6.1' lbl_winnt_win7 lbl_error
! Z: c5 z- b* ]7 y# O$ s2 [
& L; L" V8 ^! L; Hlbl_winnt_x:
. t' ?3 ?; u; A2 W: BStrCpy $R0 "NT $R0" 6; F- K! D" q) _! o* C1 o
Goto lbl_done
3 G7 z7 A4 D( }- |2 k, K0 U6 ^- b% f. r' [6 z2 i
lbl_winnt_2000:/ J2 c k9 p- o6 Q$ g) p4 {! e
Strcpy $R0 '2000'
: X, [0 g" ]% Z* NGoto lbl_done7 v' R8 s$ O+ a/ p% N
6 _! Q- p5 m! T. S7 V. Elbl_winnt_XP:
8 P8 {7 t- R4 L2 C- NStrcpy $R0 'XP'
2 r' d# K5 Y1 C' lGoto lbl_done( g/ q" L2 t3 G, G# @- H
$ t6 ~. X" l! @) klbl_winnt_2003:
7 b+ C/ L2 @) _! ]5 `Strcpy $R0 '2003'
% z7 @; p6 y4 R( GGoto lbl_done. a2 j, W/ Y1 _! _8 T# d, W
8 [1 F" G! Q" R
lbl_winnt_vista:/ b: K3 z; \4 E( H: }
Strcpy $R0 'Vista'
! W# i" h8 I( c' X' S% FGoto lbl_done1 A- H0 Q2 y! E
8 s1 [+ D7 E- ` W+ l; \7 T# dlbl_winnt_win7:
' f$ n9 |. n/ ~4 r. RStrcpy $R0 'Win7'
E+ F! p1 W* G5 s1 eGoto lbl_done) C' ^: l, f2 ]8 [: E) U2 v: [! W# U
0 h( m8 \ O5 t7 r- y( s
$ h& J ^( {/ D" J4 J; Llbl_error:
* J3 n4 I$ L. h- sStrcpy $R0 ''. l: S+ T, v) w" c
lbl_done:
9 i9 N5 B. ]. \0 A
* R w5 {: Y" v0 ?% E2 w4 fPop $R1# s3 U6 {' }) d. T3 w8 }- H
Exch $R00 j) M: {, N4 I7 a) o1 m$ H
9 @! h5 `/ S0 Y3 g! `/ N2 d
FunctionEnd6 B# F8 k5 }% W, x) P. e# ~
|