如何以编程方式确定已安装的IIS版本

时间:2009-01-12 10:38:46

标签: .net iis version-detection

以编程方式确定当前安装的Microsoft Internet信息服务(IIS)版本的首选方法是什么?

我知道可以通过查看HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters中的MajorVersion键找到它。

这会是推荐的方式,还是.NET开发人员可以使用更安全或更漂亮的方法?

6 个答案:

答案 0 :(得分:5)

public int GetIISVersion()
{
     RegistryKey parameters = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\W3SVC\\Parameters");
     int MajorVersion = (int)parameters.GetValue("MajorVersion");

     return MajorVersion;
}

答案 1 :(得分:4)

要从IIS进程外部识别版本,一种可能性如下所示......

string w3wpPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.System), 
    @"inetsrv\w3wp.exe");
FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(w3wpPath);
Console.WriteLine(versionInfo.FileMajorPart);

要在运行时从工作进程中识别它......

using (Process process = Process.GetCurrentProcess())
{
    using (ProcessModule mainModule = process.MainModule)
    {
        // main module would be w3wp
        int version = mainModule.FileVersionInfo.FileMajorPart
    }
}

答案 2 :(得分:1)

您可以构建WebRequest并将其发送到环回IP地址上的端口80并获取Server HTTP标头。

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://127.0.0.1/");
HttpWebResponse myHttpWebResponse = null;
try
{
    myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
}
catch (WebException ex)
{
    myHttpWebResponse = (HttpWebResponse)ex.Response;
}
string WebServer = myHttpWebResponse.Headers["Server"];
myHttpWebResponse.Close();

不确定这是否是一种更好的方法,但这肯定是另一种选择。

答案 3 :(得分:0)

我是这样做的(使用Powershell):

function Validate-IISVersion([switch] $ContinueOnError = $false)
{
if ($ContinueOnError)
{ $ErrorActionPreference = "SilentlyContinue" }
else
{ $ErrorActionPreference = "Stop" }

# Using GAC to ensure the IIS (assembly) version
$IISAssembly = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
$IISVersion = $IISAssembly.GetName().Version
$IISVersionString = [string]::Format("{0}.{1}.{2}.{3}", $IISVersion.Major, $IISVersion.Minor, $IISVersion.Build, $IISVersion.Revision)
if (!$IISVersionString.Equals("7.0.0.0"))
{
    if ($ContinueOnError)
    {
        Write-Host  "`nConflicting IIS version found! [Version: $IISVersionString]`t    " -NoNewline -ForegroundColor Red
    }
    Write-Error "Conflicting IIS version found [$IISVersionString]! @ $(Split-Path $MyInvocation.ScriptName -leaf)"
    return $false
}
else
{
    return $true
}
}

答案 4 :(得分:0)

无需编写代码。您可以在注册表编辑器中找到它

转到运行 - > type - regedit - >

注册表的LOCAL MACHINE分支包含Windows 7的版本信息。

起始分支位于(HKLM)HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ InetStp \ VersionString

注意:空格用于阅读目的。

答案 5 :(得分:0)

以下命令帮助我在IIS 8.5(Windows 2012 R2)和7.5 Windows 7 SP1上正确找到了IIS版本。

<强> [System.Diagnostics.FileVersionInfo] :: GetVersionInfo( “$ ENV:systemroot \ System32中\ INETSRV \ InetMgr.exe”)。的ProductVersion

<强>参考:

https://forums.iis.net/p/1171695/1984536.aspx:来自f00_beard

的回答