首页 > 其他分享 >在 Inno Setup 中检测 .NET 5 / .NET Core 运行环境是否存在

在 Inno Setup 中检测 .NET 5 / .NET Core 运行环境是否存在

时间:2024-05-27 21:55:56浏览次数:28  
标签:Core exe Setup Framework netcorecheck NET Microsoft

为了将 .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
    • ASP.NET Core Runtime 5.0
    • .NET Desktop Runtime 5.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

 

标签:Core,exe,Setup,Framework,netcorecheck,NET,Microsoft
From: https://www.cnblogs.com/webenh/p/18216624

相关文章

  • Inno Setup Dependency Installer 安装包 运行环境安装
    Downloadandinstallanydependencysuchas.NET,VisualC++orSQLServerduringyourapplication'sinstallation!Inthisarticle,youwillseeinstallation,usage,integration,details,anddependenciesofInnoSetupDependencyInstaller.Downlo......
  • 通过 .NET NativeAOT 实现用户体验升级
    前言#TypedocConverter 是我先前因帮助维护monaco-editor-uwp但苦于monacoeditor的API实在太多,手写C#的类型绑定十分不划算而发起的一个项目。这个工具可以将typedoc根据TypeScript生成的JSON文件直接生成对应的C#类型绑定代码,并提供完整的JSON序列化支持,......
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
       将.NET程序集与依赖合并到一起的方法有下面四种:使用.NETCore3.0自带的PublishSingleFile属性合并依赖使用Fody使用SourceYard源代码包使用ILMerge(微软所写)或者ILRepack(基于Mono.Ceil)————————————————版权声......
  • POSEIDON: Privacy-Preserving Federated NeuralNetwork Learning
    写在最前面,感觉这一篇的技术更贴近于密码学,所以部分核心技术读起来比较吃力。仅供大家参考哇~Abstract—Inthispaper,weaddresstheproblemofprivacypreservingtrainingandevaluationofneuralnetworksinanN-party,federatedlearningsetting.Weproposea......
  • Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐
    1 metallb安装参考:Kubernetes(k8s)v1.30.1本地集群部署默认不支持LoadBalancermetallb来解决-CSDN博客2 删除Layer2模式配置kubectldelete-fIPAddressPool.yamlkubectldelete-fL2Advertisement.yamlkubectldelete-fdiscuz-srv.yaml3配置k8sMeta......
  • .NET 7 AOT 的使用以及 .NET 与 Go 互相调用
    目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#和Golang互调C#调用GolangGolang调用C#其他 背景其实,规划这篇文章有一段时......
  • dotnet c# samples core nativeaot NativeLibrary
     如何在System.Text.Json中使用源生成 https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json/source-generation?pivots=dotnet-8-0 https://github.com/dotnet/samples/tree/main/core/nativeaot/NativeLibrary   ......
  • 基于.NET Framework 4.8.1的ASP.NET Web用Gitlab Runner调用MSBuild之后没有bin\rosl
    摘要基于.NETFramework4.8.1的传统ASP.NETWeb程序,使用GitlabRunner自动集成,在发布的网站目录下,没有bin\Roslyn文件夹。这里涉及到容易被忽视的Roslyn编译器的知识点。Roslyn是什么?在我们的ASP.NETWeb项目源代码中有什么体现?1、web.config下有配置节点一般在web.config末......
  • .net 8 api部署到iis出现500.19
    1.先下载了.net8sdk包,sdk包自带运行时。2.通过文件发布api到iis3.点击运行出现500.19,已经程序池改为无托管代码,并无效果4.点击模块发现core的api无法展示模块列表,framework可以展示 5.下载dotnet-hosting-2.2.5-win 问题解决链接:https://download.visualstudio.microsoft.com......
  • 传统的ASP.NET Web Form程序如何使用最新的MSBuild特性
    摘要旧的.csproj文件,在使用NuGet包的时候,会随着引用一个包,一下子添加n多个包。我们把旧的.csproj文件迁移到最新的格式,就能避免这个问题。直接上效果<ProjectToolsVersion="12.0"DefaultTargets="Build"Sdk="Microsoft.NET.Sdk.Web"xmlns="http://schemas.microsoft.com/de......