C#检测.net版本相关
using System; using Microsoft.Win32; namespace GetDoNetVersion { /* * https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#net_b * */ class Program { static void Main(string[] args) { Version vs = Environment.Version; Console.WriteLine("正在执行代码的运行时版本:"); Console.WriteLine(string.Format("完整版本字符串:{0}", vs)); //完整版本字符串 Console.WriteLine(string.Format("主版本:{0}", vs.Major)); //主版本标识符(例如,4.0 版的“4”) Console.WriteLine(string.Format("次版本:{0}", vs.Minor)); //次版本标识符(例如,4.0 版的“0”) Console.WriteLine("------------------"); GetVersionFromRegistry(); //Get45PlusFromRegistry(); Console.Read(); } /// <summary> /// 检测本机.Net版本 /// </summary> private static void GetVersionFromRegistry() { // Opens the registry key for the .NET Framework entry. using (RegistryKey ndpKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ""). OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\")) { // As an alternative, if you know the computers you will query are running .NET Framework 4.5 // or later, you can use: // using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, // RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\")) foreach (string versionKeyName in ndpKey.GetSubKeyNames()) { if (versionKeyName.StartsWith("v")) { RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName); string name = (string)versionKey.GetValue("Version", ""); string sp = versionKey.GetValue("SP", "").ToString(); string install = versionKey.GetValue("Install", "").ToString(); if (install == "") //no install info, must be later. Console.WriteLine(versionKeyName + " " + name); else { if (sp != "" && install == "1") { Console.WriteLine(versionKeyName + " " + name + " SP" + sp); } } if (name != "") { continue; } foreach (string subKeyName in versionKey.GetSubKeyNames()) { RegistryKey subKey = versionKey.OpenSubKey(subKeyName); name = (string)subKey.GetValue("Version", ""); if (name != "") sp = subKey.GetValue("SP", "").ToString(); install = subKey.GetValue("Install", "").ToString(); if (install == "") //no install info, must be later. Console.WriteLine(versionKeyName + " " + name); else { if (sp != "" && install == "1") { Console.WriteLine(" " + subKeyName + " " + name + " SP" + sp); } else if (install == "1") { Console.WriteLine(" " + subKeyName + " " + name); } } } } } } } /// <summary> /// 查询本机.Net4.5及以上版本是否已安装 /// </summary> private static void Get45PlusFromRegistry() { const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"; using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)) { if (ndpKey != null && ndpKey.GetValue("Release") != null) { Console.WriteLine(".NET Framework Version: " + CheckFor45PlusVersion((int)ndpKey.GetValue("Release"))); } else { Console.WriteLine(".NET Framework Version 4.5 or later is not detected."); } } } // Checking the version using >= will enable forward compatibility. private static string CheckFor45PlusVersion(int releaseKey) { if (releaseKey >= 461808) return "4.7.2 or later"; if (releaseKey >= 461308) return "4.7.1"; if (releaseKey >= 460798) return "4.7"; if (releaseKey >= 394802) return "4.6.2"; if (releaseKey >= 394254) return "4.6.1"; if (releaseKey >= 393295) return "4.6"; if (releaseKey >= 379893) return "4.5.2"; if (releaseKey >= 378675) return "4.5.1"; if (releaseKey >= 378389) return "4.5"; // This code should never execute. A non-null release key should mean // that 4.5 or later is installed. return "No 4.5 or later version detected"; } } }