.netinstallationversion-detection

How do I detect what .NET Framework versions and service packs are installed?


A similar question was asked here, but it was specific to .NET 3.5. Specifically, I'm looking for the following:

  1. What is the correct way to determine which .NET Framework versions and service packs are installed?
  2. Is there a list of registry keys that can be used?
  3. Are there any dependencies between Framework versions?

Solution

  • The registry is the official way to detect if a specific version of the Framework is installed.

    enter image description here

    Which registry keys are needed change depending on the Framework version you are looking for:

    Framework Version  Registry Key
    ------------------------------------------------------------------------------------------
    1.0                HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 
    1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install 
    2.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install 
    3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\InstallSuccess 
    3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install 
    4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install
    4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Install
    

    Generally you are looking for:

    "Install"=dword:00000001
    

    except for .NET 1.0, where the value is a string (REG_SZ) rather than a number (REG_DWORD).

    Determining the service pack level follows a similar pattern:

    Framework Version  Registry Key
    ------------------------------------------------------------------------------------------
    1.0                HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
    1.0[1]             HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 
    1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\SP 
    2.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\SP 
    3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\SP 
    3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\SP 
    4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Servicing
    4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Servicing
    
    [1] Windows Media Center or Windows XP Tablet Edition
    

    As you can see, determining the SP level for .NET 1.0 changes if you are running on Windows Media Center or Windows XP Tablet Edition. Again, .NET 1.0 uses a string value while all of the others use a DWORD.

    For .NET 1.0 the string value at either of these keys has a format of #,#,####,#. The last # is the Service Pack level.

    While I didn't explicitly ask for this, if you want to know the exact version number of the Framework you would use these registry keys:

    Framework Version  Registry Key
    ------------------------------------------------------------------------------------------
    1.0                HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 
    1.0[1]             HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 
    1.1                HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 
    2.0[2]             HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Version 
    2.0[3]             HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Increment
    3.0                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Version 
    3.5                HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Version 
    4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 
    4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 
    
    [1] Windows Media Center or Windows XP Tablet Edition
    [2] .NET 2.0 SP1
    [3] .NET 2.0 Original Release (RTM)
    

    Again, .NET 1.0 uses a string value while all of the others use a DWORD.

    Additional Notes

    Update for .NET 4.5

    There won't be a v4.5 key in the registry if .NET 4.5 is installed. Instead you have to check if the HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full key contains a value called Release. If this value is present, .NET 4.5 is installed, otherwise it is not. More details can be found here and here.