NSIS 一款非常好的软件安装大包工具

来源:互联网 发布:雷克萨斯es和皇冠知乎 编辑:程序博客网 时间:2024/04/28 17:09

1 检测是否有 net 吗

现在.NET开发的软件已经大行其道,但有些操作系统并不符合软件的运行要求,所以,我们需要在安装程序中进行.NET Framework的判断,如果不符合要求就进行静默安装。

 

首先,我们在Function区段进行当前.NET版本判断:

源码 打印帮助

01 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打到安装包中,这样可以减小安装包体积,效果可

0 0