The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 ASP.NET 取得正在執行的 IIS 版本資訊

由於每個 IIS 版本之間多少都會有功能上的增進與架構上的差異,像我們在寫 ASP.NET MVC 的時候有時後就需要依據 IIS 的版本來做出一些特別的判斷,所以必須透過程式來取得正在執行的 IIS 版本資訊,在 ASP.NET 裡取得正在執行的 IIS 版本資訊原本是一件容易的事,不過當遇到了跟我們一樣的特殊情況就沒那麼簡單了,有興趣的就繼續看下去。

一般來說是可以透過 HttpRequest.ServerVariables 屬性 (Property) 裡的 SERVER_SOFTWARE 元素來取得正在執行的 IIS 版本資訊,程式碼如下:

string ver = Request.ServerVariables["SERVER_SOFTWARE"];

取得的資料依據不同版本回應如下:

  • Microsoft-IIS/4.0 (Windows NT 4.0)
  • Microsoft-IIS/5.0 (Windows 2000)
  • Microsoft-IIS/5.1 (Windows XP)
  • Microsoft-IIS/6.0 (Windows Server 2003 )
  • Microsoft-IIS/7.0 (Windows Server 2008 / Windows Vista)
  • Microsoft-IIS/7.5 (Windows Server 2008 R2 / Windows 7)

不過,能夠使用這段程式的前提是你必須要先有 HttpRequest 物件的存在才能使用,以我們的特殊例子來說,我們須在 Global.asax 中的 Application_Start() 事件就要先判斷 IIS 的版本,否則程式可能會無法正常運作,在這種情況下,我總是找不到好的解決方案,只好自己想了一種 Tricky 的作法,也就是利用作業系統的版本來判定 IIS 的版本!

由於 Windows 作業系統一直以來都與 IIS 緊密結合著,所以光是判斷作業系統的主要版本與次要版本即可分辨出該版本的作業系統內建的 IIS 版本為何,以下是我寫的判斷程式:

protected string GetIisVersion()
{
    string strResult = "Unknown";

    Version ver = System.Environment.OSVersion.Version;

    if (ver.Major == 4 && ver.Minor == 0)
    {
        strResult = "IIS 4.0";
    }
    else if (ver.Major == 5)
    {
        if (ver.Minor == 0)
        {
            strResult = "IIS 5.0";
        }
        else if (ver.Minor == 1)
        {
            strResult = "IIS 5.1";
        }
        else if (ver.Minor == 2)
        {
            strResult = "IIS 6.0";
        }
    }
    else if (ver.Major == 6)
    {
        if (ver.Minor == 0)
        {
            strResult = "IIS 7.0";
        }
        else if (ver.Minor == 1)
        {
            strResult = "IIS 7.5";
        }
    }

    return strResult;
}

雖然不是什麼非常正規的作法,不過至少可以判斷出 IIS 4.0 到 IIS 7.5 的每一種版本,還算堪用啦!^_^

相關連結