如何最好地检索已安装的 .NET 桌面运行时版本?
Posted
技术标签:
【中文标题】如何最好地检索已安装的 .NET 桌面运行时版本?【英文标题】:How to best retrieve installed .NET Desktop Runtime versions? 【发布时间】:2021-12-17 01:52:09 【问题描述】:我需要以编程方式 (c#) 确定系统上是否安装了某个 .NET Desktop Runtime 版本。
我发现的一个选项是检查注册表中的版本,如this post 建议的那样。但是,这只会检索安装的最新版本。例如,可以在此处的注册表中找到 ASP.NET Core 版本:SOFTWARE\Microsoft\ASP.NET Core\Shared Framework
System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;
只会检索应用程序正在运行的框架的版本。
官方的方式似乎是使用命令“dotnet --list-runtimes”(由 Microsoft here 记录)。这需要从应用程序启动一个 cmd 进程。
是否有另一种可能的方式来检索当前安装的 .NET 桌面运行时版本?
【问题讨论】:
你的背景是什么?您是否正在检查您的应用程序是否可以安装?如果是这样,请参阅Visual Studio Installer Projects Extension - re: 与其试图弄清楚安装了什么,不如将它变成一个先决条件(可以作为过程的一部分安装) 我只想在系统上不存在更高版本的情况下部署和运行 .NET Desktop Runtime 5.0.x 可执行文件。应该可以不使用 MSI 技术。 恕我直言,您处于“鸡还是蛋”中。为了“找出系统中的内容”,您必须安装“某些东西”(假设它可以已安装 - 你怎么知道 - “因此是先有鸡还是先有蛋”?)或让用户“自己做某事并让你知道”。根据过去的经验,安装程序项目“没有痛苦”(对于最终用户而言)。 IOW,您基于 .Net 的某个版本编写应用程序,这成为 先决条件(无论如何)。安装程序 msi 将确定版本是否可用,如果不可用,则可选地下载它。否则,您将重新创建该安装程序已经执行的操作,或者根据您的“支持的框架”(作为软件提供商)编写不同的 .Net 版本的应用程序,并让用户选择哪个... 或者您自己包含部署引导程序,并使用它来检测并可能安装运行时。 【参考方案1】:这不是一个好方法,但您可以检查系统中是否存在 .NET 安装文件夹。对于 .net 运行时,安装文件夹是 -
C:\program files\dotnet\sharedruntime-typeversion\
【讨论】:
其实,this is the officially recommended way。问题是关于 .NET Core,而不是 .NET Foundation,因此检查文件夹位置非常好。但可能没有必要,因为 .NET Core 允许发布自包含的应用程序以上是关于如何最好地检索已安装的 .NET 桌面运行时版本?的主要内容,如果未能解决你的问题,请参考以下文章
installshield 升级包如何删除低版本已安装的文件?
如何最好地从 Java/JDBC 中的 SQL 查询中检索 SELECT COUNT(*) 的结果 - Long?大整数?