Winform打包-NSIS 检测.NetFramework版本(亲测可用)
首先介绍下,HM NIS Edit工具,是一款已非常简洁好用的winform打包工具,功能强大,插件丰富,还有丰富的第三方界面库支持。
随着C/S模式开发的越来越少,这方面的资料,尤其是NSIS的资料都极其稀少。翻了很多文章,进行整合,终于找到比较满意的.NetFramework检测,并安装的实现方式。
进入正题,网上查了很多资料遇到问题:版本号对比一直无效,后来改为了用内置的版本号对比函数。
代码如下:
头部一定记得添加:!include “WordFunc.nsh”。看名称就是字符串操作之类的。
1.检测.NetFramework版本(读取注册表,这里与网上绝大多数资料一样)
Function GetNetFrameworkVersion ;获取.Net Framework版本支持 Push $1 Push $0 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full""Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full""Version" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5""Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5""Version" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "Version" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Version" StrCmp $1 "" +1 +2 StrCpy $1 "2.0.50727.832" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Version" StrCmp $1 "" +1 +2 StrCpy $1 "1.1.4322.573" StrCmp $0 1 KnowNetFrameworkVersion +1 ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0""Install" ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0""Version" StrCmp $1 "" +1 +2 StrCpy $1 "1.0.3705.0" StrCmp $0 1 KnowNetFrameworkVersion +1 StrCpy $1 "not .NetFramework" KnowNetFrameworkVersion: Pop $0 Exch $1 FunctionEnd
2.比较版本,并进行安装。(网上很多使用If判断的测试没有效果,所以使用脚本内置的版本号比较方法)
Section - "比较版本号" DetailPrint "正在检测安装环境..." Call GetNetFrameworkVersion Pop $R1 ${VersionCompare} "4.5.50709" "$R1" $R2 ${If} $R2 == 0 DetailPrint "当前版本($R1),无需安装组件" ${ElseIf} $R2 == 1 DetailPrint "当前组件版本($R1)过低,需要安装(4.5.2)版本的组件" ${ElseIf} $R2 == 2 DetailPrint "当前版本($R1),无需安装组件" ${EndIf} SectionEnd Section -.NET Call GetNetFrameworkVersion Pop $R1 ${VersionCompare} "4.5.2" $R1 $R2 ${If} $R2 == 1 MessageBox MB_ICONINFORMATION|MB_OK "检测到当前系统缺少微软.NetFramework 4.5.2组件,需要进行安装,此操作有可能引起杀毒软件误报。" SetDetailsPrint textonly DetailPrint "准备安装.NetFramework 4.5.2组件" SetDetailsPrint listonly SetOutPath "$TEMP" SetOverwrite on File "Src\NETFramework4.5.2.exe" ExecWait '$TEMP\NETFramework4.5.2.exe ' $R1 Delete "$TEMP\NETFramework4.5.2.exe" ${EndIf} SectionEnd
对,就这么多,把这些贴进去之前的脚本,就可以搞定。