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.2" "$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

对,就这么多,把这些贴进去之前的脚本,就可以搞定。

 

posted @ 2018-10-22 14:21  骄阳似火锅  阅读(2528)  评论(0编辑  收藏  举报