zoukankan      html  css  js  c++  java
  • 在 Inno Setup iss 打包过程 中检测 .NET 6 / .net 5 / .NET Core 运行环境是否存在或已安装

    为了将 .NET 5 / .NET Core 应用程序部署到客户机,我们可以编写 Inno Setup 代码来判断客户机是否安装了必要的运行环境。.NET 官方仓库 中提供了一个名为 NetCoreCheck 的项目,可以用于检测指定的 .NET 5 / .NET Core 环境是否存在。编译好的文件可以从以下两个地址下载:

    文件名 下载地址
    netcorecheck.exe https://go.microsoft.com/fwlink/?linkid=2135256
    netcorecheck_x64.exe https://go.microsoft.com/fwlink/?linkid=2135504

    需要注意的是,以上两个文件需要依赖 Visual C++ 2015 Redistributable ,如果不具备该环境,则运行会报错。

    仅需要将运行环境名称和版本号传递给以上程序即可通过程序的返回值来判断指定的环境是否存在,如果返回值为 0 ,则代表客户机已经安装了指定的运行环境。

    @echo off
    netcorecheck.exe Microsoft.WindowsDesktop.App 5.0.0
    if %ERRORLEVEL% EQU 0 (
       echo 已安装
    ) else (
       echo 未安装
    )

    Inno Setup 脚本编写

    在 iss 文件中,我们需要将 netcorecheck.exe 和 netcorecheck_x64.exe 加入到 Files 节点:

    [Files]
    
    // dotnet core 运行环境检测依赖文件,不需要复制到输出文件。
    // download netcorecheck.exe: https://go.microsoft.com/fwlink/?linkid=2135256
    // download netcorecheck_x64.exe: https://go.microsoft.com/fwlink/?linkid=2135504
    Source: "netcorecheck.exe"; Flags: dontcopy noencryption
    Source: "netcorecheck_x64.exe"; Flags: dontcopy noencryption

    定义 IsNetCoreInstalled 方法来检测 .net core 环境是否已经安装:

    // architecture helper functions
    function IsX64: Boolean;
    begin
      Result := Is64BitInstallMode;
    end;
    
    function GetString(const x86, x64: String): String;
    begin
      if IsX64 then begin
        Result := x64;
      end else begin
        Result := x86;
      end;
    end;
    
    function GetArchitectureSuffix: String;
    begin
      Result := GetString('', '_x64');
    end;
    // 检测 .net core 环境是否已经安装
    // https://github.com/dotnet/deployment-tools/tree/master/src/clickonce/native/projects/NetCoreCheck
    function IsNetCoreInstalled(const Version: String): Boolean;
    var
      ResultCode: Integer;
    begin
      if not FileExists(ExpandConstant('{tmp}{\}') + 'netcorecheck' + GetArchitectureSuffix + '.exe') then begin
        ExtractTemporaryFile('netcorecheck' + GetArchitectureSuffix + '.exe');
      end;
      Result := ShellExec('', ExpandConstant('{tmp}{\}') + 'netcorecheck' + GetArchitectureSuffix + '.exe', Version, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) and (ResultCode = 0);
    end;

    使用方法

    以下代码展示了检测 .NET 5 运行时的代码:

    if IsNetCoreInstalled('Microsoft.NETCore.App 5.0.0') then
    begin
      Log('Microsoft.NETCore.App 5.0.0 is installed');
    end
      else 
    begin
      Log('Microsoft.NETCore.App 5.0.0 is not installed');
    end;

    下面的表格中列出了更多的参数信息:

    名称 检验参数
    .NET Core 3.1 运行环境 Microsoft.NETCore.App 3.1.0
    ASP.NET Core 3.1 运行环境 Microsoft.AspNetCore.App 3.1.0
    .NET Core 3.1 桌面运行环境 Microsoft.WindowsDesktop.App 3.1.0
    .NET 5 运行环境 Microsoft.NETCore.App 5.0.0
    ASP.NET Core 5 运行环境 Microsoft.AspNetCore.App 5.0.0
    .NET 5 桌面运行环境 Microsoft.WindowsDesktop.App 5.0.0

    引用来源

    本文是笔者根据 GitHub 仓库 InnoDependencyInstaller 中的内容整理修改而来。

    Inno Setup Dependency Installer 可以在你的应用程序安装过程中下载并安装任何依赖关系,如.NET, Visual C++或SQL Server Express Redistributable! 此外,还可以轻松地添加自己的依赖关系。

    • .NET
      • .NET Framework 1.1
      • .NET Framework 1.1 Service Pack 1
      • .NET Framework 2.0 + Service Pack 2
      • .NET Framework 3.5 + Service Pack 1
      • .NET Framework 4.0 Client
      • .NET Framework 4.0 Full
      • .NET Framework 4.5.2
      • .NET Framework 4.6.2
      • .NET Framework 4.7.2
      • .NET Framework 4.8
      • .NET Core Runtime 3.1
      • ASP.NET Core Runtime 3.1
      • .NET Desktop Runtime 3.1
      • .NET Runtime 5.0
      • .NET Runtime 6.0
      • ASP.NET Core Runtime 5.0
      • ASP.NET Core Runtime 6.0
      • .NET Desktop Runtime 5.0
      • .NET Desktop Runtime 6.0
    • C++
      • Visual C++ 2005 Redistributable
      • Visual C++ 2008 Redistributable
      • Visual C++ 2010 Redistributable
      • Visual C++ 2012 Redistributable
      • Visual C++ 2013 Redistributable
      • Visual C++ 2015-2019 Redistributable
    • SQL
      • SQL Server 2008 Express R2 + Service Pack 2
      • SQL Server 2012 Express + Service Pack 4
      • SQL Server 2014 Express + Service Pack 3
      • SQL Server 2016 Express + Service Pack 2
      • SQL Server 2017 Express
      • SQL Server 2019 Express
    • DirectX End-User Runtime
    • Windows Installer 4.5

    在此,感谢仓库作者 DomGries 的辛勤劳动和付出。

    // contribute: https://github.com/DomGries/InnoDependencyInstaller
    // official article: https://codeproject.com/Articles/20868/Inno-Setup-Dependency-Installer

    转自:http://Www.CnBlogs.Com/WebEnh/
    本博客Android APP 下载
    支持我们就给我们点打赏
    支付宝打赏 支付宝扫一扫二维码
    微信打赏 微信扫一扫二维码

    如果想下次快速找到我,记得点下面的关注哦!
  • 相关阅读:
    shell_02
    shell_practise
    Shell_01
    PythonDay_03
    PythonDay_02
    PythonDay_01
    面试题32:从上到下打印二叉树
    面试题 31 : 栈的压入、弹出序列
    面试题20 : 表示数值的字符串
    面试题29:顺时针打印矩阵
  • 原文地址:https://www.cnblogs.com/webenh/p/15582373.html
Copyright © 2011-2022 走看看