2009-01-15 7 views
34

Comment détecter la version d'IIS en utilisant C#?Comment détecter la version d'IIS en utilisant C#?

Mise à jour: je voulais dire à partir d'un WinApp (en fait le scénario développe un programme d'installation personnalisé qui veut vérifier de la version de IIS installé pour appeler le api approprié)

+0

côté côté serveur ou client (par exemple appeler un site Web IIS à partir d'une application winforms)? Je suppose que vous voulez dire côté serveur. – splattne

+0

Je voulais dire d'un winapp (en fait le scénario développe un installateur personnalisé qui veut vérifier la version de l'IIS installé pour appeler les API appropriées) devrait l'écrire dans la question principale .. (désolé) .. –

Répondre

29

Vous pouvez obtenir ces informations de la variable SERVER_SOFTWARE . Il retournera les éléments suivants:

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

etc.

Si vous utilisez ASP.NET, vous pouvez obtenir cette chaîne via

Request.ServerVariables["SERVER_SOFTWARE"]; 

EDIT : Il semble que vous devrez interroger le registre pour obtenir cette information. Jetez un oeil à this page pour voir comment.

+0

Ce lien exactement ce dont j'avais besoin merci. –

+9

-1 Cela fonctionne uniquement à partir d'une requête Web – balexandre

6

Vous pouvez le trouver dans le registre.

Jusqu'à la version IIS 6, vous pouvez le trouver ici:

HKLM \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters

Depuis la version 7 ici:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ InetStp

MajorVersion MinorVersion

+0

IIS 7 dispose également d'une entrée dans HKLM \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters, au moins sur Windows7 32 bits. (Version majeure 7, version mineure 5). Mais cette clé ne semble plus disponible sur Windows Server 2008 (IIS7). –

3

Il est généralement présenté en-tête HTTP de la réponse, que je sache.

3

Utilisez System.Web.HttpRequest.ServerVariables ("SERVER_SOFTWARE"). La valeur de retour est une chaîne au format nom/version.

12

Voici comment je le fais.

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

//Tip... look at verinfo.MajorVersion. 
+0

Fantastique, merci! – balexandre

+0

fonctionne pour XP, Win7, Win2003, Win2008? – Kiquenet

+1

Ceci lance une exception FileNotFoundException sur Windows2008R2 (même lorsque le fichier est là). Ressemble à un problème d'autorisation de fichier. –

33

J'ai trouvé la réponse ici: link text La méthode fileVersion dose ne fonctionne pas sous Windows 2008, l'ineserv exe est ailleurs.

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); 
    } 
} 

Je l'ai testé, il fonctionne parfaitement sous Windows XP, 7 et 2008

+0

fonctionne également dans Windows 8 et 2012. – artfulhacker

+0

Fonctionne également avec Windows 2003 Server! – dotnetguy

1

Dans .NET 4,5

HttpRuntime.IISVersion 
+2

S'il vous plaît ajouter quelques explications aussi tout en répondant aux questions .. – Lal

+0

Explicite ... Comment détecter la version IIS en utilisant C#? Utilisez httpRuntime.IISVersion. – h0ckey09

+0

Comme je comprends la question, l'OP recherche la version d'IIS lors de l'exécution du programme d'installation. HttpRuntime.IISVersion renverra 'null' si l'application n'est pas hébergée par IIS, donc cette réponse ne semble pas aider le PO. – Beofett

Questions connexes