Как программно определить установленную версию IIS - PullRequest
9 голосов
/ 12 января 2009

Каков предпочтительный способ программного определения текущей установленной версии Microsoft Internet Information Services (IIS)?

Я знаю, что это можно найти, посмотрев ключ MajorVersion в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters.

Будет ли это рекомендуемый способ сделать это, или есть ли более безопасный или более красивый метод, доступный для разработчика .NET?

Ответы [ 6 ]

5 голосов
/ 23 февраля 2011
public int GetIISVersion()
{
     RegistryKey parameters = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\W3SVC\\Parameters");
     int MajorVersion = (int)parameters.GetValue("MajorVersion");

     return MajorVersion;
}
4 голосов
/ 13 января 2009

Чтобы определить версию извне процесса 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
    }
}
1 голос
/ 12 января 2009

Вы можете создать WebRequest и отправить его на порт 80 по IP-адресу обратной связи и получить 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();

Не уверен, что это лучший способ сделать это, но, безусловно, это еще один вариант.

0 голосов
/ 04 октября 2016

Следующая команда помогла мне правильно найти версию IIS в IIS 8.5 (Windows 2012 R2) и 7.5 Windows 7 SP1.

[System.Diagnostics.FileVersionInfo] :: GetVersionInfo ( "$ ENV: SystemRoot \ system32 \ Inetsrv \ InetMgr.exe"). ProductVersion

Справка:

https://forums.iis.net/p/1171695/1984536.aspx: ответ от f00_beard

0 голосов
/ 19 января 2016

Не нужно писать код. Вы можете найти его в редакторе реестра

Перейти к запуску -> Тип - regedit ->

Ветвь реестра LOCAL MACHINE содержит информацию о версии для Windows 7.

Начальная ветвь находится в (HKLM) HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ InetStp \ VersionString

Примечание. Пробелы предназначены для чтения.

0 голосов
/ 04 сентября 2012

Я сделал это так (используя 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
}
}
...