为了将 .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

 

在 Inno Setup 中检测 .NET 5 / .NET Core 运行环境是否存在的更多相关文章

  1. 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤

    原文 http://www.cnblogs.com/2356/archive/2009/10/27/1590565.html 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤 ...

  2. 如何在 Inno Setup 中关联多种文件格式

    问题描述 Inno Setup 是一款十分强大的 Windows 安装程序制作软件,可以通过编写并编译 iss 脚本来创建安装包.之前都是直接将 Pyinstaller 生成的文件夹压缩为 zip 格 ...

  3. Inno setup中定制安装路径

    我的程序修改了安装界面,所以我的界面中提供了更改安装路径的方法. 用户修改后的路径会被传回inno setup脚本,脚本中需要做的事情如下: 1,写一个函数,来返回新的安装路径,如: function ...

  4. 在Unicode版Inno Setup中使用ISSkin

    ISSkin是Code jock 公司出品的Inno Setup 皮肤插件,用于为Inno制作的安装程序提供皮肤功能. 自Delphi发布2009之后,Inno Setup 开始出现支持Unicode ...

  5. Inno setup 中 执行参数传递注意的地方

    Inno setup编译器编译使用pascal脚本编写的打包代码,其中Run段可以执行某些特定的程序,遇到一个bat批处理文件传递参数的问题,记录如下 1: [Run] 2: Filename: &q ...

  6. Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. 在 Inno Setup 中实现倒数N秒后激活按钮

    原文 http://restools.hanzify.org/article.asp?id=67 timectrl.dll 为一个 6.5 KB 的按钮激活时间控制插件.  引用来自 Example1 ...

  8. Inno Setup中多语言时,使用占位符填充

    如在: [CustomMessages] CreateDesktopIcon=Create a Desktop icon NameAndVersion=%1 version %2 普通的获取Custo ...

  9. 如何在 Inno Setup 中执行命令行的命令

    Pascal Scripting: Exec Prototype: function Exec(const Filename, Params, WorkingDir: String; const Sh ...

  10. Inno Setup中做补丁通过注册表获取原程序安装目录

    今天找VM补丁看到的,是个innosetup封装的,所以习惯性的喜欢去看人家的iss文件是怎么编写的. DefaultDirName={reg:HKLM\SOFTWARE\VMware%2c%20In ...

随机推荐

  1. Spring Boot 项目五维度九层次分层架构实现实践研究——持续更新中

    var code = "12433d02-b242-4fd2-937d-750761a365ea" 说明:本博文有参考一些技术博主的思路,据实践内容及代码持续总结更新中. 五个分层 ...

  2. Hadoop之Hive架构与设计

    Hadoop之Hive架构与设计 Hadoop是一个能够对大量数据进行分布式处理的软件框架.具有可靠.高效.可伸缩的特点. HDFS:全称为Hadoop分布式文件系统(Hadoop Distribut ...

  3. 自己diy一个smi(可以监控gpu,cpu,memory)

    diy-smi 1.0(DIY System management interface) 在我们训练自己深度学习模型时,我们想看GPU信息,也想看CPU和内存信息.我常用的是nvidia-smi和ht ...

  4. 多python版本的库安装和导库

    同时安装多python版本的,使用pip安装python的库,以及导出python库列表及版本,使用导出的库列表批量进行新环境的库安装. 1.同时安装python2和python3时,要进行pip安装 ...

  5. git默认忽略文件名称大小写

    0. 现象 当将文件名称test 修改为 Test时,git提交记录检测不到变化 1.原因 Git默认设置忽略文件名大小写是因为不同操作系统对文件名大小写的处理方式不同,为了避免在不同操作系统之间出现 ...

  6. [Violation] 'click' handler took 429ms

    问题 violation 意思为侵权,违背,违反,也就是说明click函数执行违反了某些规则 原因测试 当click事件中执行的程序耗时过长,超过160ms左右的时候就会显示该信息,测试最低155ms ...

  7. 如何在 Anolis 8上部署 Nydus 镜像加速方案?

    简介: 手把手教你在 Anolis OS 上部署 Nydus! 在上一篇文章中详细介绍Anolis OS 是首个原生支持镜像加速 Linux 内核,Nydus 镜像加速服务重新优化了现有的 OCIv1 ...

  8. Raft 共识算法1-Raft基础

    Raft 共识算法1-Raft基础 Raft算法中译版地址:http://www.redisant.cn/etcd/contact 英原论文地址:https://raft.github.io/raft ...

  9. 一个在线下载地图XYZ瓦片的网站实现

    1. 什么是XYZ瓦片 XYZ瓦片是一种在线地图数据格式,常见的地图底图如Google.OpenStreetMap 等互联网的瓦片地图服务,都是XYZ瓦片,严格来说是ZXY规范的地图瓦片 ZXY规范的 ...

  10. 创建第一个springmvc程序

    创建第一个springmvc程序 1.创建父项目文件,导入依赖,删除src文件夹 pom.xml文件 <dependencies> <dependency> <group ...