原文 NSIS:判断并安装.NET Framework 4 的例子
现在.NET开发的软件已经大行其道,但有些操作系统并不符合软件的运行要求,所以,我们需要在安装程序中进行.NET Framework的判断,如果不符合要求就进行静默安装。
首先,我们在Function区段进行当前.NET版本判断:
01 |
Function GetNetFrameworkVersion |
05 |
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install"
|
06 |
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Version"
|
07 |
StrCmp $0 1 KnowNetFrameworkVersion +1 |
08 |
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Install"
|
09 |
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Version"
|
10 |
StrCmp $0 1 KnowNetFrameworkVersion +1 |
11 |
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess"
|
12 |
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "Version"
|
13 |
StrCmp $0 1 KnowNetFrameworkVersion +1 |
14 |
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install"
|
15 |
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Version"
|
17 |
StrCpy $1 "2.0.50727.832"
|
18 |
StrCmp $0 1 KnowNetFrameworkVersion +1 |
19 |
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install"
|
20 |
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Version"
|
22 |
StrCpy $1 "1.1.4322.573"
|
23 |
StrCmp $0 1 KnowNetFrameworkVersion +1 |
24 |
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Install"
|
25 |
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Version"
|
27 |
StrCpy $1 "1.0.3705.0"
|
28 |
StrCmp $0 1 KnowNetFrameworkVersion +1 |
29 |
StrCpy $1 "not .NetFramework"
|
30 |
KnowNetFrameworkVersion: |
|
然后,在Section区段进行.NET静默安装:
02 |
Call GetNetFrameworkVersion |
04 |
${If} $R1 < '4.0.30319'
|
05 |
SetDetailsPrint textonly
|
06 |
DetailPrint "正在安装 .NET Framework 4"
|
07 |
SetDetailsPrint listonly
|
11 |
File "dotNetFx40_Full_x86_x64.exe"
|
12 |
ExecWait '$TEMP\dotNetFx40_Full_x86_x64.exe /q /norestart /ChainingPackage FullX64Bootstrapper' $R1
|
13 |
Delete "$TEMP\dotNetFx40_Full_x86_x64.exe"
|
|
当然,在Section区段可以做到自动在线下载而不把.NET打到安装包中,这样可以减小安装包体积,效果可参考
紫辰记账本安装程序。