在c#中如何查看系统已安装的.NET Framework版本

我们可以通过注册表查找系统已安装的.NET Framework版本

.NET Framework版本号的注册表位置位于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full

.NET Framework 版本版本号最小值
.NET Framework 4.5378389
.NET Framework 4.5.1378675
.NET Framework 4.5.2379893
.NET Framework 4.6393295
.NET Framework 4.6.1394254
.NET Framework 4.6.2394802
.NET Framework 4.7460798
.NET Framework 4.7.1461308
.NET Framework 4.7.2461808
.NET Framework 4.8528040

比如,如果值大于等于461308 并且 小于461808 ,那么版本就是4.7.1

打开.NET Framework项的注册表项。

using ( Microsoft.Win32.RegistryKey ndpKey =
	Microsoft.Win32.RegistryKey.OpenRemoteBaseKey( Microsoft.Win32.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 ( Microsoft.Win32.RegistryKey ndpKey =
	// 	Microsoft.Win32.RegistryKey.OpenBaseKey( Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry32 )
	// 	.OpenSubKey( @"SOFTWARE\Microsoft\NET Framework Setup\NDP\" ) )
	foreach ( string versionKeyName in ndpKey.GetSubKeyNames( ) )
	{
		if ( versionKeyName.StartsWith( "v" ) )
		{
			Microsoft.Win32.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.
			{
				System.Console.WriteLine( versionKeyName + "  " + name );
			}
			else
			{
				if ( sp != "" && install == "1" )
				{
					System.Console.WriteLine( versionKeyName + "  " + name + "  SP" + sp );
				}
			}
			if ( name != "" )
			{
				continue;
			}
			foreach ( string subKeyName in versionKey.GetSubKeyNames( ) )
			{
				Microsoft.Win32.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.
				{
					System.Console.WriteLine( versionKeyName + "  " + name );
				}
				else
				{
					if ( sp != "" && install == "1" )
					{
						System.Console.WriteLine( "  " + subKeyName + "  " + name + "  SP" + sp );
					}
					else if ( install == "1" )
					{
						System.Console.WriteLine( "  " + subKeyName + "  " + name );
					}
				}
			}
		}
	}
}

查看已安装的.NET Framework版本的函数

const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

using (var 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 >= enables forward compatibility.
static string CheckFor45PlusVersion(int releaseKey)
{
    if (releaseKey >= 528040)
        return "4.8 or later";
    if (releaseKey >= 461808)
        return "4.7.2";
    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";
}

还可以使用命令行查找

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802
日期:2020-04-11 22:50:24 来源:oir作者:oir