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

在 Inno Setup iss 打包过程 中检测 .NET 6 / .net 5 / .NET Core 运行环境是否存在或已安装的更多相关文章

  1. 使用Inno SetUp脚本打包Winform程序

    在开发桌面程序时,往往需要用到打包工具将程序打包为exe可执行文件. 之前在项目中用了下 InstallShield Limited Edition for Visual Studio  2015,它 ...

  2. 使用meaven打包过程中遇到的一些问题

    开始使用如下代码进行打包 <build> <!-- mvn assembly:assembly -Dmaven.test.skip=true --> <plugins&g ...

  3. Aandroid 解决apk打包过程中出现的“Certificate for <jcenter.bintray.com> doesn't match any of the subject alternative names: [*.aktana.com, aktana.com]”的问题

    有时候,apk打包过程中会出现“Certificate for <jcenter.bintray.com> doesn't match any of the subject alterna ...

  4. servers中添加server时,看不到运行环境的选择。

    servers中添加server时,看不到运行环境的选择. 主要原因是tomcat目录中的配置文件格式不对.

  5. Inno setup 简单打包教程

    转自:http://blog.csdn.net/ruifangcui7758/article/details/6662646 前段时间关注了VC6.0自带的Installshield打包的使用方法,感 ...

  6. Inno Setup 5打包exe遇到的坑,做一个学习记录

    ; 脚本由 Inno Setup 脚本向导 生成!; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "人员管理系统"#de ...

  7. [InnoSetup]Inno Setup软件打包脚本

     脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!   #define MyAppName "SFT期货交易系统&quo ...

  8. Inno Setup Winfrom 打包工具

    1.下载并安装Inno Setup 编译器 2.安装完成后打开Inno Setup 编译器: 3.选择[用「脚本向导」创建新的脚本文件(S)]: 4.点击[下一步]: 5.填写制作后程序的基本信息: ...

  9. Storm编译打包过程中遇到的一些问题及解决方法

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2013/11/30/som ...

  10. Inno Setup:获取isl中的多国语言字串

    原文 http://zwkufo.blog.163.com/blog/static/25882512010101041626803/?suggestedreading&wumii 用InnoS ...

随机推荐

  1. HarmonyOS分布式文件系统开发指导

      分布式文件系统概述 分布式文件系统(hmdfs,HarmonyOS Distributed File System)提供跨设备的文件访问能力,适用于如下场景: ● 两台设备组网,用户可以利用一台设 ...

  2. Mysql系列:Mysql5.7编译安装--系统环境:Centos7 / CentOS9 Stream

    Mysql系列:Mysql5.7编译安装 系统环境:Centos7 / CentOS9 Stream 1:下载mysql源码包 https://dev.mysql.com/downloads/mysq ...

  3. 在windows电脑中安装redis

    1,github下载地址:https://github.com/MSOpenTech/redis/tags 2,下载完成后,解压到对应文件夹 3,打开redis.windows.conf,在#requ ...

  4. 关于伺服刹车/急停/前后设备信号对接/PLC输入输出模块的公共端介绍

    一.伺服刹车 关键词:急停,急停中间继电器.刹车中间继电器,刹车使能 正文: 通常情况不用硬件为主导而用程序来主导控制,多场景应用方便修改且安全可靠. 伺服刹车硬件,一般是24v电源给进去,就会释放刹 ...

  5. 基于Ganos百行代码实现亿级矢量空间数据在线可视化

    简介: 本文介绍如何使用RDS PG或PolarDB(兼容PG版或Oracle版)的Ganos时空引擎提供的数据库快显技术,仅用百行代码实现亿级海量几何空间数据的在线快速显示和流畅地图交互,且无需关注 ...

  6. Serverless 工程实践 | Serverless 应用开发观念的转变

    ​简介: Serverless 架构带来的除了一种新的架构.一种新的编程范式,还包括思路上的转变,尤其是开发过程中的一些思路转变.有人说要把 Serverless 架构看成一种天然的分布式架构,需要用 ...

  7. [FE] 浅谈 Chakra UI 的现代化浅封装 - 语义化大行其道

      Web2.0 发展至今,网页元素越来越丰富和多样化,数据越来越多. 从需求上来说,也已经不再是展示简单个静态网页,高效的开发交互.打通后端数据,产生了 React 和 Vue 两个著名框架. Re ...

  8. [FE] jsoneditor 在 vue-router 和 vue-ssr 渲染下出现两个实例的问题

    由于 vue-router 页面是无刷新的,如果存在两次渲染,会出现如下情形. 简单粗暴的解决办法是通过判断容器中是否已经有了子节点. 此时再从其他 router link 返回就不会重复渲染了. M ...

  9. [Ethereum] 浅谈加密商品市场 OpenSea 与 opensea-js

    OpenSea 是用于交易以太坊加密商品的网上商店,主要的商品是 ERC721.ERC1155 标准的 Token. 它的特色就在于,只需要一个部署好的智能合约,你就能在 OpenSea 提供的界面上 ...

  10. notepad运行python代码的步骤

    notepad运行python代码的步骤: 1.用notepad++打开python文件.或者新建文件,保存为.py格式. 2.在菜单栏上面有一个运行,我们点击运行->运行,或者使用快捷键F5. ...