To find .NET Framework versions by viewing the registry (.NET Framework 1-4)On the Start menu, choose Run. In the Open box, enter regedit.exe. You must have administrative credentials to run regedit.exe. In the Registry Editor, open the following subkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP The installed versions are listed under the NDP subkey. The version number is stored in the Version entry. For the .NET Framework 4 theVersion entry is under the Client or Full subkey (under NDP), or under both subkeys. Note |
---|
The "NET Framework Setup" folder in the registry does not begin with a period. |
To find .NET Framework versions by viewing the registry (.NET Framework 4.5 and later)On the Start menu, choose Run. In the Open box, enter regedit.exe. You must have administrative credentials to run regedit.exe. In the Registry Editor, open the following subkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full Note |
---|
If the Full subkey is not present, then you do not have a the .NET Framework 4.5 or later installed. |
Check for a DWORD value named Release. The existence of the Release DWORD indicates that the .NET Framework 4.5 or newer has been installed on that computer. The value of the Release DWORD indicates which version of the .NET Framework is installed. Value of the Release DWORD | Version |
---|
378389 | .NET Framework 4.5 | 378675 | .NET Framework 4.5.1 installed with Windows 8.1 or Windows Server 2012 R2 | 378758 | .NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2 | 379893 | .NET Framework 4.5.2 | 381029 | .NET Framework 4.6 Preview |
To find .NET Framework versions by querying the registry in code (.NET Framework 1-4)Use the Microsoft.Win32.RegistryKey class to access the Software\Microsoft\NET Framework Setup\NDP\ subkey under HKEY_LOCAL_MACHINE in the Windows registry. The following code shows an example of this query. Note |
---|
This code does not show how to detect .NET Framework 4.5 or later. Check the Release DWORD to detect those versions, as described in the previous section. |
using System;
using Microsoft.Win32;
...
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);
}
}
}
}
}
}
}
The example produces output that's similar to the following: v2.0.50727 2.0.50727.4016 SP2
v3.0 3.0.30729.4037 SP2
v3.5 3.5.30729.01 SP1
v4
Client 4.0.30319
Full 4.0.30319
To find .NET Framework versions by querying the registry in code (.NET Framework 4.5 and later)The existence of the Release DWORD indicates that the .NET Framework 4.5 or later has been installed on a computer. The value of the keyword indicates the installed version. To check this keyword, use the OpenBaseKey and OpenSubKey methods of theMicrosoft.Win32.RegistryKey class to access the Software\Microsoft\NET Framework Setup\NDP\v4.0\Full subkey under HKEY_LOCAL_MACHINE in the Windows registry. Check the value of the Release keyword to determine the installed version. To be forward-compatible, you can check for a value greater than or equal to the values listed in the table. Here are the .NET Framework versions and associated Release keywords. Version | Value of the Release DWORD |
---|
.NET Framework 4.5 | 378389 | .NET Framework 4.5.1 installed with Windows 8.1 | 378675 | .NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2 | 378758 | .NET Framework 4.5.2 | 379893 | .NET Framework 4.6 Preview | 381029 |
Here's an example of checking for a value greater than or equal to the release keyword values for each version.: using System;
using Microsoft.Win32;
...
private static void Get45or451FromRegistry()
{
using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\")) {
int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release"));
if (true) {
Console.WriteLine("Version: " + CheckFor45DotVersion(releaseKey));
}
}
}
...
// Checking the version using >= will enable forward compatibility,
// however you should always compile your code on newer versions of
// the framework to ensure your app works the same.
private static string CheckFor45DotVersion(int releaseKey)
{
if ((releaseKey >= 379893)) {
return "4.5.2 or later";
}
if ((releaseKey >= 378675)) {
return "4.5.1 or later";
}
if ((releaseKey >= 378389)) {
return "4.5 or later";
}
// This line 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";
}
The example produces output that's similar to the following:
To find the current runtime version by using the Clrver toolUse the CLR Version Tool (Clrver.exe) to determine which versions of the common language runtime are installed on a computer. From a Visual Studio Command Prompt, enter clrver. This command produces output similar to the following: Versions installed on the machine:
v2.0.50727
v4.0.30319
For more information about using this tool, see Clrver.exe (CLR Version Tool).
To find the current runtime version by querying the Environment class in codeQuery the Version property of the Environment class to identify the version of the runtime that is currently executing the code. You can use the Version.Major property to get the major release identifier (for example, "4" for version 4.0), the Version.Minor property to get the minor release identifier (for example, "0" for version 4.0), or the Object.ToString method to get the entire version string (for example, "4.0.30319.18010", as shown in the following code). This property returns a single value that reflects the version of the runtime that is currently executing the code; it does not return assembly versions or other versions of the runtime that may have been installed on the computer. Here's an example of querying the Environment.Version property for runtime version information: using System;
using Microsoft.Win32;
...
private static void GetVersionFromEnvironment()
{
Console.WriteLine("Version: " + Environment.Version.ToString());
}
The example produces output that's similar to the following:
|