相关文章推荐

在NSIS下判断Microsoft .NET Framework版本并进行安装,网上的教程大多数都是以下的示例。然后在我实际使用中却发现有问题。

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

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

然后,在Section区段进行.NET静默安装:

Section -.NET
    Call GetNetFrameworkVersion
    Pop $R1
    ${If} $R1 < '4.6.01590'
        SetDetailsPrint textonly
        nsSkinEngine::SetControlData "progressTip"  "正在安装.NET Framework 4,请耐心等候..."  "text"
        SetDetailsPrint listonly
        SetOutPath "$TEMP"
        SetOverwrite on
        File "..\Library\Microsoft .NET Framework 4.6.2.exe"
        ExecWait '$TEMP\Microsoft .NET Framework 4.6.2 /q /norestart /ChainingPackage FullX64Bootstrapper' $R1
        Delete "$TEMP\Microsoft .NET Framework 4.6.2.exe"
    ${EndIf}
SectionEnd

问题重现: 计算机已安装.NET Framework 4.5.2,实际需要安装.NET Framework 4.6.2,这时按如上写法是不会安装.NET Framework 4.6.2的。

原因分析: 经输出日志发现,问题出现在 ${If} $R1 < '4.6.01590' 这一句上。$R1获取到的值为4.5.51209 (.NET Framework 4.6.2对应版本为4.6.01590),实际是没有执行IF语句块。

解决办法: 因为我不知道如何让 ${If} $R1 < '4.6.01590' 语句生效,所以我采用了其它写法。写法如下

Section -.NET Framework
    Call GetNetFrameworkVersion
    Pop $R1
    ${VersionCompare} $R1 '4.6.01590' $1
    ${If} $1 == '2'
        SetDetailsPrint textonly
        nsSkinEngine::SetControlData "progressTip"  "正在安装.NET Framework 4.6.2,请耐心等候..."  "text"
        SetDetailsPrint listonly
        SetOutPath "$TEMP"
        SetOverwrite on
        File "..\Library\Microsoft .NET Framework 4.6.2.exe"
        ExecWait '$TEMP\Microsoft .NET Framework 4.6.2 /q /norestart /ChainingPackage FullX64Bootstrapper' $R1
        Delete "$TEMP\Microsoft .NET Framework 4.6.2.exe"
    ${EndIf}
SectionEnd

需要注意的是必须在脚本前面引用!include “WordFunc.nsh” 。因为VersionCompare函数存在于此文件中。

目前开发的程序以基于 .net 的应用程序为主,程序开发好后,需要进行 安装 包的生成,及setup文件的生成。 常见的是 NSIS 工具,之前一直用的单文件 打包 工具,不适合将运行环境加进去,因此开始使用更高版本的 NSIS 3.06。 关于 判断 .NET Framework 运行环境 (离线 安装 ) 首先添加头文件: 用来版本比较 !include "WordFunc.nsh" 添加 GetNet Framework Version 函数,这里给出完整函数代码: Function GetNet Framework 这段时间在学习 nsis 打包 ,遇到了一个问题, nsis 脚本设置 .net 运行环境问题,在网上看了不少教程,但都不完整,这里给出一个我觉得 判断 .net 版本的连接:http://blog.csdn .net /aqtata/article/details/51814602这里是分版本 判断 电脑的 .net 是否 安装 ,有了 判断 .net 是否 安装 的方法,剩下的就是调用,网上给出了很多调用此方法的例子,如: Section 如果我们的软件开发的语言使用的是C#,使用的平台框架是Net. Framework ,哪么在部署软件 安装 时,就需要考虑在 安装 过程检测是否需要 安装 net环境,并进行 安装 。 本文以ScreenToGif 这款软件为例,详细讲解如何在 安装 的过程中检测并下载net包进行 安装 。 1、ScreenToGif 是一款开源的截屏软件,依赖于Net. Framework 环境 2、本文讲解的 NSIS 安装 过程为自定义界面,而非传统界面(需要传统界面的留言区留言)。 3、Win10系统好像是自动集成了Net.Fr.. 参考资料[3]来做 S1:新建一个空的C++DLL项目,nsMessageBoxPlugin. S2:复制“C:\Program Files (x86)\ NSIS \Unicode\Examples\Plugin\ nsis ”文件夹到
 
推荐文章