NSIS:判断并安装.NET Framework 4 的例子
原文 NSIS:判断并安装.NET Framework 4 的例子
现在.NET开发的软件已经大行其道,但有些操作系统并不符合软件的运行要求,所以,我们需要在安装程序中进行.NET Framework的判断,如果不符合要求就进行静默安装。
首先,我们在Function区段进行当前.NET版本判断:
Function GetNetFrameworkVersion 02 ;获取.Net Framework版本支持 03 Push $1 04 Push $0 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" 16 StrCmp $1 "" +1 +2 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" 21 StrCmp $1 "" +1 +2 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" 26 StrCmp $1 "" +1 +2 27 StrCpy $1 "1.0.3705.0" 28 StrCmp $0 1 KnowNetFrameworkVersion +1 29 StrCpy $1 "not .NetFramework" 30 KnowNetFrameworkVersion: 31 Pop $0 32 Exch $1 33 FunctionEnd
然后,在Section区段进行.NET静默安装:
01 Section -.NET 02 Call GetNetFrameworkVersion 03 Pop $R1 04 ${If} $R1 < '4.0.30319' 05 SetDetailsPrint textonly 06 DetailPrint "正在安装 .NET Framework 4" 07 SetDetailsPrint listonly 08 09 SetOutPath "$TEMP" 10 SetOverwrite on 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" 14 ${EndIf} 15 SectionEnd
当然,在Section区段可以做到自动在线下载而不把.NET打到安装包中,这样可以减小安装包体积,效果可参考紫辰记账本安装程序。