有时我们用NSis 打包EXE的时候需要获取操作系统的版本,我们可以参考下面的函数
3 V) Q1 p' \5 R V1 l% N9 W/ v
* Q: y* S8 Y2 \5 j调用方式:
5 [6 l4 L) ]! W) }( g4 n( G- P
call GetWindowsVersion
6 k2 i! F+ F3 g, x+ r( Z) u Pop $R0$ Q. T, W. ], s& m( O
8 `+ D, J- B4 @0 M! ~8 O7 t3 u. D1 z' ^. n$ [
;获取操作系统类型
" _+ J& q. s" F0 {( P" \. {) l* _# qFunction GetWindowsVersion
) X: F; L$ p9 d2 c3 pPush $R0
$ |" J4 |! b7 \6 Y' d" n ^Push $R1
# C% @# E+ @' n9 I6 WClearErrors
2 s( D4 b/ W1 |3 W- [* YReadRegStr $R0 HKLM \; M6 `9 |- F/ n* s; \9 n% w
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
' E) @2 a* r" Y% F: y8 i, T. wIfErrors 0 lbl_winnt. a7 {" R3 V; N; |& |
; we are not NT
2 B4 ^* @1 X2 e% qReadRegStr $R0 HKLM \ L+ M6 V) j8 I, d, F4 h# _
"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
9 n0 q! L* b: L7 t/ }2 m0 N6 J
, m6 h: t$ }7 D0 y8 C( NStrCpy $R1 $R0 1- K( |% J% a7 h3 _
StrCmp $R1 '4' 0 lbl_error
9 g$ ]6 S- ^. r" q# d! s- i
# I) u) O9 C, ?9 p6 L# {' L _StrCpy $R1 $R0 3
: f2 g9 z* {$ G9 }$ u; f& y& p- \5 |7 ~6 l4 T
StrCmp $R1 '4.0' lbl_win32_95
: f0 j+ |9 Q. Z* ~% ]StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
; R' b" J/ P1 T" z7 l) ]5 B% Q7 a+ N" K5 h# s
lbl_win32_95:9 K$ O4 R" Z/ f+ }( T
StrCpy $R0 '95'
& H+ m: z, i$ I/ T7 D1 zGoto lbl_done
8 V9 c. ^2 U0 j6 Q' J9 g9 x6 T1 H. @4 ?
lbl_win32_98:# \$ J4 l) ^; o: O$ S; r% H, W
StrCpy $R0 '98'
M1 G, M2 X9 Q' ^0 n# x3 v8 b, jGoto lbl_done- r# x, Q/ E" P |+ s% j8 _
" H0 c8 |8 Y1 C- ?+ _0 P4 dlbl_win32_ME:3 o( p* [. k1 X3 }! L
StrCpy $R0 'ME'9 m. T2 O0 o9 A9 v8 l
Goto lbl_done
9 D- U$ V" E+ E+ y% g9 e1 x5 W
- V' N6 t' P; u: z7 y9 Ylbl_winnt:# H! j* c$ s& |# q( R' J
7 V A' i, I* I# j# X5 m, w
StrCpy $R1 $R0 1
0 Z6 K. B( o1 @+ I, T' u# u e6 c$ b& r2 m5 d" A3 Q
StrCmp $R1 '3' lbl_winnt_x$ y+ N' V- M' H: B
StrCmp $R1 '4' lbl_winnt_x# h0 {" O# L8 c9 C/ T
7 Q: o! }9 C0 O/ g3 r$ ^# B: SStrCpy $R1 $R0 34 Q- m! K6 w# Q7 q2 f
4 u& Y2 J$ h& d9 ^( MStrCmp $R1 '5.0' lbl_winnt_2000
, V4 s6 f6 i1 YStrCmp $R1 '5.1' lbl_winnt_XP
0 d( c9 o2 B9 { K! O% rStrCmp $R1 '5.2' lbl_winnt_2003* _& |9 _1 @" F. m. p9 w
StrCmp $R1 '6.0' lbl_winnt_vista1 x4 z/ b5 p$ d2 d! }/ a! {7 m- O
) Z- X' a0 @% B* o9 \, x
StrCmp $R1 '6.1' lbl_winnt_win7 lbl_error
7 h2 _- }6 w" O! x8 _: s0 _- b1 W! [# H: e% G
lbl_winnt_x:0 M4 x, g; f8 t K5 o2 W/ L* g
StrCpy $R0 "NT $R0" 6
2 `( ^9 r. t# Q3 Y2 _4 YGoto lbl_done6 R# x( S9 Q1 b3 O$ i# r
4 t9 T4 i) W6 X0 t5 V) O+ |& U
lbl_winnt_2000:* @. U+ L8 E5 {/ R
Strcpy $R0 '2000'7 G. v# r0 L8 k
Goto lbl_done8 N* H- b. e3 t0 A+ o
( X! e- q. f6 v4 J) y& m
lbl_winnt_XP:
d3 P! E2 V5 g3 u9 W/ n8 x/ a* {- r7 qStrcpy $R0 'XP'
/ C- A& j3 q6 j w W3 bGoto lbl_done' f6 H( H% H. }; o$ V, b% z: y
1 z7 P; i& Q- J( U, L+ U
lbl_winnt_2003:
% ^& Y% D% }# r6 h: E1 z' {" L/ gStrcpy $R0 '2003'% k# ]; A+ U2 y1 L
Goto lbl_done3 B* R& z; N, v9 }: G
. g/ X8 i: a. |8 P8 h" Olbl_winnt_vista:- w9 n# T3 q- S) N; O/ T! o
Strcpy $R0 'Vista'
' ~- `$ g9 C8 Y, d" z# \( qGoto lbl_done
6 O3 c! j6 k9 M" a
; J6 \; a( s: ^) Nlbl_winnt_win7:( ~! g+ _* A( `* J |2 B% L6 h
Strcpy $R0 'Win7'
! E+ m+ p# @$ b" x# tGoto lbl_done
; m* ]' |- w% J% v# {! U/ B! y
. x( R) _9 c: w/ T
% r+ A2 [3 A5 Z6 e, t* qlbl_error:
5 P% _! ?, L* v9 ?6 [Strcpy $R0 ''
% d) t7 n! ]' i( O, A3 Q3 P0 B3 }9 dlbl_done:
# z! i& t1 z+ K5 B8 M' r3 `
+ _9 M3 G) e: q% B7 RPop $R1' N1 R2 R: G4 n/ E% f; y
Exch $R0# B9 V& [0 y' B% k+ S
6 a+ H) A: l' R1 cFunctionEnd
: X9 P1 ^, _8 x: T+ g |