tags:

views:

4232

answers:

8

How to detect IIS version using C#?

Update: I meant from a winapp (actually the scenario is developing a custom installer that wants to check the version of the installed IIS to call the appropriate api's)

+15  A: 

You can get this information from the SERVER_SOFTWARE variable. It will return the following:

Microsoft-IIS/5.0 (Windows 2000)
Microsoft-IIS/5.1 (Windows XP)
Microsoft-IIS/6.0 (Windows 2003 Server)

etc.

If you're using ASP.NET, you can get this string via

Request.ServerVariables["SERVER_SOFTWARE"];

EDIT: It seems that you will have to query the registry to get this information. Take a look at this page to see how.

hmemcpy
That link exactly what i needed thank u.
Amr Elsehemy
-1 This will only work from a Web Request
balexandre
+5  A: 

U can find it in the registry.

Up to IIS version 6 you can find it here:

HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters

Since version 7 here:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp

MajorVersion MinorVersion

Peter
IIS 7 also has an entry in HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters, at least on Windows7 32 bit. (Major version 7, minor version 5). But this key appears not to be availalbe on Windows Server 2008 (IIS7) anymore.
Quandary
A: 

Check the X-Powered-By header: http://www.http-stats.com/X-Powered-By

There you can find the possibly values...

Ironicnet
A: 

It is usually presented in http header of response, as i know.

nihi_l_ist
+1  A: 

Use System.Web.HttpRequest.ServerVariables("SERVER_SOFTWARE"). The return value is a string in the format name/version.

gkrogers
+9  A: 

This is how i do it.

FileVersionInfo verinfo = FileVersionInfo.GetVersionInfo(System.Environment.SystemDirectory + @"\inetsrv\inetinfo.exe");

//Tip... look at verinfo.MajorVersion.
Jesper Palm
Fantastic, thxs!
balexandre
A: 

I would just check the version of the OS: xp has IIS 5.1, Server 2003 has IIS 6 and vista/Server 2008 has IIS 7.

Here's how to check the version of the OS.

Lodewijk
+4  A: 

Found the answer here: link text The fileVersion method dosesn't work on Windows 2008, the inetserv exe is somewhere else I guess.

public Version GetIisVersion()
{
using (RegistryKey componentsKey =
Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\InetStp", false))
{
if (componentsKey != null)
{
int majorVersion = (int)componentsKey.GetValue("MajorVersion", -1);
int minorVersion = (int)componentsKey.GetValue("MinorVersion", -1);
if (majorVersion != -1 && minorVersion != -1)
{
return new Version(majorVersion, minorVersion);
}
}
return new Version(0, 0);
}
}

I tested it, it works perfectly on Windows XP, 7 and 2008

ErTelis