How can I find out if SP1 has been installed on a server which has .NET 3.5?
7 Answers
Look at HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\
. One of these must be true:
- The
Version
value in that key should be 3.5.30729.01 - Or the
SP
value in the same key should be 1
In C# (taken from the first comment), you could do something along these lines:
const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5";
RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name);
var version = subKey.GetValue("Version").ToString();
var servicePack = subKey.GetValue("SP").ToString();
-
8const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name); var version = subKey.GetValue("Version").ToString(); var servicePack = subKey.GetValue("SP").ToString(); – Chris Craft May 05 '09 at 20:54
-
2On my machine, `Version` is `3.5.30729.5420` and `SP` is `1` – Kevin Smyth Jul 26 '13 at 15:03
-
3On the command line: `reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V Version` `reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V SP` – Kevin Smyth Jul 26 '13 at 15:04
-
There will be a problem: if a user don't have .NET installed, how do your program written with .NET **run** to detect if .NET is installed? – zwcloud Sep 20 '19 at 07:30
You could go to SmallestDotNet using IE from the server. That will tell you the version and also provide a download link if you're out of date.

- 4,030
- 5
- 34
- 33
-
4Only tells you the highest version though, e.g. if you have 4, it wont tell you whether you also have 3.5 sp 1 – codeulike Feb 05 '13 at 16:46
Use Add/Remove programs from the Control Panel.

- 17,483
- 12
- 63
- 79
-
1Go figure. Later, I thought I missed a "programatically" point to your question, Guy. – rp. May 11 '09 at 02:58
I came to this page while trying to figure out how to detect the framework versions installed on a server without access to remote desktop or registry, so Danny V's answer worked for me.
string path = System.Environment.SystemDirectory;
path = path.Substring( 0, path.LastIndexOf('\\') );
path = Path.Combine( path, "Microsoft.NET" );
// C:\WINDOWS\Microsoft.NET\
string[] versions = new string[]{
"Framework\\v1.0.3705",
"Framework64\\v1.0.3705",
"Framework\\v1.1.4322",
"Framework64\\v1.1.4322",
"Framework\\v2.0.50727",
"Framework64\\v2.0.50727",
"Framework\\v3.0",
"Framework64\\v3.0",
"Framework\\v3.5",
"Framework64\\v3.5",
"Framework\\v3.5\\Microsoft .NET Framework 3.5 SP1",
"Framework64\\v3.5\\Microsoft .NET Framework 3.5 SP1",
"Framework\\v4.0",
"Framework64\\v4.0"
};
foreach( string version in versions )
{
string versionPath = Path.Combine( path, version );
DirectoryInfo dir = new DirectoryInfo( versionPath );
if( dir.Exists )
{
Response.Output.Write( "{0}<br/>", version );
}
}

- 904
- 8
- 8
-
Worked as expected for me. Just created a new website project, added the code and put it on the share, then requested the page. – Kris van der Mast Jun 21 '10 at 14:32
Take a look at this article which shows the registry keys you need to look for and provides a .NET library that will do this for you.
First, you should to determine if .NET 3.5 is installed by looking at HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install, which is a DWORD value. If that value is present and set to 1, then that version of the Framework is installed.
Look at HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\SP, which is a DWORD value which indicates the Service Pack level (where 0 is no service pack).
To be correct about things, you really need to ensure that .NET Fx 2.0 and .NET Fx 3.0 are installed first and then check to see if .NET 3.5 is installed. If all three are true, then you can check for the service pack level.

- 42,236
- 12
- 79
- 110
-
1article link is changed, here it is the new location: http://www.codeproject.com/KB/dotnet/frameworkversiondetection.aspx – Drake Jul 02 '09 at 09:34
Check is the following directory exists:
In 64bit machines: %SYSTEMROOT%\Microsoft.NET\Framework64\v3.5\Microsoft .NET Framework 3.5 SP1\
In 32bit machines: %SYSTEMROOT%\Microsoft.NET\Framework\v3.5\Microsoft .NET Framework 3.5 SP1\
Where %SYSTEMROOT% is the SYSTEMROOT enviromental variable (e.g. C:\Windows).

- 17,324
- 5
- 69
- 111
Assuming that the name is everywhere "Microsoft .NET Framework 3.5 SP1", you can use this:
string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
return rk.GetSubKeyNames().Contains("Microsoft .NET Framework 3.5 SP1");
}

- 18,992
- 6
- 45
- 54
-
+1, the easiest way so far to programmatically check if 3.5 SP1 is installed - actually, if it worked. I tried it, it doesn't work for me, it always returns false. – Evgeniy Berezovsky Jul 28 '11 at 05:48
-
Skimming through the collection returned by GetSubKeyNames(), the plain text name is used for some products, for some - like the .net frameworks, the product ids {1ea1f-...} are being used. That's why it can't be found. – Evgeniy Berezovsky Jul 28 '11 at 06:26