我们可以通过注册表查找系统已安装的.NET Framework版本
.NET Framework版本号的注册表位置位于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
| .NET Framework 版本 | 版本号最小值 |
|---|---|
| .NET Framework 4.5 | 378389 |
| .NET Framework 4.5.1 | 378675 |
| .NET Framework 4.5.2 | 379893 |
| .NET Framework 4.6 | 393295 |
| .NET Framework 4.6.1 | 394254 |
| .NET Framework 4.6.2 | 394802 |
| .NET Framework 4.7 | 460798 |
| .NET Framework 4.7.1 | 461308 |
| .NET Framework 4.7.2 | 461808 |
| .NET Framework 4.8 | 528040 |
比如,如果值大于等于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
