有时我们用NSis 打包EXE的时候需要获取操作系统的版本,我们可以参考下面的函数
# M5 E, S5 k0 J( L" I ?
# L" n; N+ {: l, Z1 V* l调用方式:
& R' p# ?5 z( v
3 J: o/ M$ A5 ^) z8 `1 Kcall GetWindowsVersion7 G7 Q- }# G! e# x& e1 y+ {! S
Pop $R0! a1 y3 U, z, v) K0 R7 ^2 G
# ?/ s) A4 {7 ?* a# Q
) v+ _' l( M H/ E# h) {;获取操作系统类型
) s5 z1 q& R6 j nFunction GetWindowsVersion
' a& A4 ?+ U7 v8 G G- D/ q$ VPush $R05 v9 V5 P9 ^2 [8 ?( {1 T
Push $R1
9 E1 P. z2 C3 l) Z- VClearErrors
) F! v$ z1 H: s. {- b- b. HReadRegStr $R0 HKLM \, z# f8 ~# l% \" {
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion# k! M& c8 \8 |6 e2 f
IfErrors 0 lbl_winnt% {& q; v. @! {! `1 K6 B) s
; we are not NT, u5 O/ N8 b; u/ F2 u1 `
ReadRegStr $R0 HKLM \
3 _+ \" M3 \ e! i# |& S( \"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
1 _+ t6 G1 _: f& S+ `' W( G
% y9 E) r& @$ W& f3 y$ uStrCpy $R1 $R0 1
1 S" I- h5 @ Y1 R# cStrCmp $R1 '4' 0 lbl_error
- l( \9 {3 g) R$ G: p A
; y; U: P" _2 @! R; AStrCpy $R1 $R0 3
( f' Q' s u. |3 Y) K
% {1 \. q4 e( \8 }StrCmp $R1 '4.0' lbl_win32_95
% P- c1 z1 r, Q% J' ?4 G6 D8 ^StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98! E; _4 u/ D V: W' E9 L6 b
# `! u- e( w7 m$ C" L
lbl_win32_95:; u( [8 v: \$ W5 @' J
StrCpy $R0 '95'/ T" E! [, O0 s0 [
Goto lbl_done
0 n7 [0 l2 o h5 ~4 E7 ]& C! ]6 L# ]' n" n! h% Z
lbl_win32_98:8 D: _0 ~, R- a2 p( _
StrCpy $R0 '98'* x2 ?( N* E! `* z+ X8 ^( M5 Z8 Z
Goto lbl_done3 C. S7 G9 I" w
) o0 w3 _! W2 l, V8 f) s" ~
lbl_win32_ME:! W( r I- z9 \9 E
StrCpy $R0 'ME'
% B6 ? N6 P: D( {, N% `1 ]Goto lbl_done! E' ]. d* O4 ~5 d, {- d6 I- s
3 q v C$ [3 K& D$ x$ \lbl_winnt:8 @! M- F% [+ O- K
+ W/ Y' b* i: j9 c
StrCpy $R1 $R0 1
: E+ O) e3 u( z1 h* t- l
, W+ p+ p# ] z8 e5 R3 |" EStrCmp $R1 '3' lbl_winnt_x+ W* u. g# q& q# u2 l
StrCmp $R1 '4' lbl_winnt_x
5 U7 v) a5 P9 O% h" v; h- Q* R# u1 I u" D1 B: V
StrCpy $R1 $R0 3
4 y/ F% c7 V- P+ H7 ~" f2 k7 c% P+ o& i$ ]
StrCmp $R1 '5.0' lbl_winnt_2000% V8 h! d) c: l
StrCmp $R1 '5.1' lbl_winnt_XP" {5 e- J' ~* P& Q9 a( c
StrCmp $R1 '5.2' lbl_winnt_20030 _6 f# U* l& a7 ?0 N
StrCmp $R1 '6.0' lbl_winnt_vista& M3 E* t$ e6 m9 \1 K7 E
Q+ ?2 }' f( N! u' QStrCmp $R1 '6.1' lbl_winnt_win7 lbl_error
& J3 G( f; y7 l3 o( o& V' @/ u
+ Z9 H& E" Z( U( o" N) E! Ilbl_winnt_x:
5 t4 r2 T# d. {* ?% G0 fStrCpy $R0 "NT $R0" 67 r6 D* H. ^" y9 N5 _( Q* E) V9 F8 X
Goto lbl_done6 v& |4 k8 `' f- l) N6 v: J
" l2 \. v% U0 r0 ^6 [& Q
lbl_winnt_2000:
% r* c2 } ~8 ?' x2 X1 j& VStrcpy $R0 '2000'
5 N! e* \" t+ nGoto lbl_done
+ ^1 |$ _3 y3 R8 E( f
9 c0 [& r% {% \5 k ~, S' jlbl_winnt_XP:
+ \2 w3 t: O+ ` ^Strcpy $R0 'XP'8 H6 m) H# l9 p4 L# J
Goto lbl_done
! j( m& v' Y, ~0 M2 h5 f, V: A1 b! k7 l
lbl_winnt_2003:
+ [3 ^9 W2 L' PStrcpy $R0 '2003'
, f( I7 D" @& i9 h5 P6 ?' AGoto lbl_done4 n9 m" Y2 Q- r& K4 F
c Y+ \: \, k" [8 I# j1 Nlbl_winnt_vista:
) H1 q' Z* _, T& ?Strcpy $R0 'Vista'6 G; L7 C1 R* ^, J0 a
Goto lbl_done
" K" \$ i+ @# P: }7 x
( ^- }: B4 D* u% vlbl_winnt_win7: \* [7 H& C+ w# Q' k! Q; B' Q3 }
Strcpy $R0 'Win7'
- o5 [/ N7 b8 VGoto lbl_done$ E! y* i: l2 i e
- E' r i0 @' T m* M, g! ]
( v# ]0 n3 e* `1 L
lbl_error:$ ?* V2 n( O5 ]0 T7 Q
Strcpy $R0 ''
! J; t. f6 [( { Y) Qlbl_done:8 Q8 m; ?+ t. G, v# h
9 }6 `4 O7 Q8 E4 [/ iPop $R1
7 o( {. r4 f. z; K% b! ?Exch $R04 m' H2 P* Q/ h2 P: x0 ^
: E3 w0 N& v6 W
FunctionEnd0 R4 X' A( S% A/ @ F f9 z' v
|