2009-01-15 3 views
34

Wie erkennt man die IIS-Version mit C#?Wie erkennt man die IIS-Version mit C#?

Update: ich von einem winapp bedeuten (eigentlich das Szenario ein benutzerdefiniertes Installationsprogramm entwickelt, das die Version des installierten IIS ruft die entsprechenden api überprüfen möge)

+0

Server-Seite oder Client-Seite (z ein IIS-Web von einer Winforms-App aufrufen)? Ich denke du meinst Server-Seite. – splattne

+0

Ich meinte von einem winapp (tatsächlich entwickelt das Szenario ein benutzerdefiniertes Installationsprogramm, das die Version des installierten IIS überprüfen möchte, um die entsprechenden APIs aufzurufen) sollte es in der Hauptfrage geschrieben .. (sorry) .. –

Antwort

29

Sie erhalten können diese Informationen aus dem SERVER_SOFTWARE Variable . Es wird wieder die folgende:

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

usw.

Wenn Sie ASP.NET verwenden, können Sie diese Zeichenfolge über

Request.ServerVariables["SERVER_SOFTWARE"]; 

EDIT erhalten : Es scheint, dass Sie die Registrierung abfragen müssen, um diese Informationen zu erhalten. Werfen Sie einen Blick auf this page, um zu sehen, wie.

+0

Dieser Link genau was ich brauchte, danke dir. –

+9

-1 Dies funktioniert nur von einer Web-Anfrage – balexandre

6

U kann es in der Registrierung finden.

Bis zu IIS Version 6 können Sie es hier finden:

HKLM \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters

Seit Version 7 hier:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ InetStp

Majorversion Minorversion

+0

IIS 7 hat auch einen Eintrag in HKLM \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters, zumindest auf Windows7 32 Bit. (Hauptversion 7, Nebenversion 5). Dieser Schlüssel scheint jedoch nicht mehr auf Windows Server 2008 (IIS7) verfügbar zu sein. –

-2

überprüfen Sie die X-Powered-By-Header:

Dort können Sie die möglicherweise Werte finden ...

3

Es normalerweise in HTTP-Header der Antwort präsentiert, wie ich weiß.

3

Verwenden Sie System.Web.HttpRequest.ServerVariables ("SERVER_SOFTWARE"). Der Rückgabewert ist eine Zeichenfolge im Format name/version.

12

So mache ich es.

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

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

Fantastisch, thxs! – balexandre

+0

funktioniert für XP, Win7, Win2003, Win2008? – Kiquenet

+1

Dies wirft eine FileNotFoundException auf Windows2008R2 (auch wenn die Datei dort ist). Sieht aus wie ein Dateiberechtigungsproblem. –

33

Gefunden die Antwort hier: link text Die Dateiversion-Methode funktioniert nicht auf Windows 2008, die inetserv-EXE ist woanders, denke ich.

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

Ich habe es getestet, es perfekt auf Windows XP arbeitet, 7 und 2008

+0

funktioniert auch in Windows 8 und 2012. – artfulhacker

+0

Funktioniert auch mit Windows 2003 Server! – dotnetguy

1

In .NET 4,5

HttpRuntime.IISVersion 
+2

bitte fügen Sie auch einige Erklärungen hinzu, während Sie Fragen beantworten. – Lal

+0

Selbsterklärend ... Wie erkennt man die IIS-Version mit C#? Verwenden Sie httpRuntime.IISVersion. – h0ckey09

+0

Wie ich die Frage verstehe, sucht das OP nach IIS-Version, wenn das Installationsprogramm ausgeführt wird. HttpRuntime.IISVersion wird "null" zurückgeben, wenn die ausgeführte Anwendung nicht von IIS gehostet wird. Daher scheint diese Antwort dem OP nicht zu helfen. – Beofett