Как определить версию IIS с помощью C#?

Как определить версию IIS с помощью C#?

Обновлять: Я имел в виду из winapp (на самом деле сценарий разрабатывает собственный установщик, который хочет проверить версию установленного IIS, чтобы вызвать соответствующий api)

На стороне сервера или на стороне клиента (например, вызов веб-службы IIS из приложения winforms)? Я думаю, вы имеете в виду серверную.

splattne 15.01.2009 14:58

Я имел в виду, что из winapp (на самом деле сценарий разрабатывает собственный установщик, который хочет проверить версию установленного IIS для вызова соответствующего API) следует написать его в основном вопросе .. (извините) ..

Amr Elsehemy 15.01.2009 15:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
36
2
26 037
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Вы можете получить эту информацию из переменной SERVER_SOFTWARE. Он вернет следующее:

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

и т.п.

Если вы используете ASP.NET, вы можете получить эту строку через

Request.ServerVariables["SERVER_SOFTWARE"];

Обновлено: Кажется, вам придется запросить реестр, чтобы получить эту информацию. Взгляните на эта страница, чтобы узнать, как это сделать.

Вы можете найти его в реестре.

До IIS версии 6 вы можете найти его здесь:

HKLM \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters

Начиная с версии 7 здесь:

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ InetStp

MajorVersion MinorVersion

IIS 7 также имеет запись в HKLM \ SYSTEM \ CurrentControlSet \ Services \ W3SVC \ Parameters, по крайней мере, в 32-разрядной версии Windows7. (Основная версия 7, дополнительная версия 5). Но этот ключ, похоже, больше не доступен в Windows Server 2008 (IIS7).

Stefan Steiger 07.09.2010 11:53

Проверьте заголовок X-Powered-By: http://www.http-stats.com/X-Powered-By

Там вы можете найти возможные значения ...

Насколько я знаю, он обычно представлен в HTTP-заголовке ответа.

Используйте System.Web.HttpRequest.ServerVariables ("SERVER_SOFTWARE"). Возвращаемое значение - строка в формате имя / версия.

Вот как я это делаю.

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

//Tip... look at verinfo.MajorVersion.

Это вызывает исключение FileNotFoundException в Windows 2008 R2 (даже если файл существует). Похоже, проблема с правами доступа к файлу.

Ignacio Soler Garcia 18.06.2012 17:19

Файл не найден 32-битным процессом на 64-битном сервере, поскольку inetsrc \ inetinfo.exe не существует в каталоге SysWOW64. Метод реестра jlafay работает во всех случаях, поскольку значение реестра присутствует как в 32-битном, так и в 64-битном разделах HKLM.

Berend Engelbrecht 15.07.2014 19:05

Я бы просто проверил версию ОС: xp имеет IIS 5.1, Server 2003 - IIS 6, а vista / Server 2008 - IIS 7.

Вот как проверить версию ОС.

Нашел ответ здесь: текст ссылки Метод fileVersion не работает в Windows 2008, я думаю, inetserv exe находится где-то еще.

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

Протестировал, отлично работает на Windows XP, 7 и 2008

Также работает с Windows 2003 Server!

Sudhanshu Mishra 27.07.2015 05:12

Для установщика с настраиваемыми действиями: В представлении настраиваемого действия вы можете передавать данные в класс установщика клиента через атрибут CustomActionData в свойствах настраиваемого действия следующим образом: / iisv = "[IISVERSION]"

Проверять:

http://johnbarshinger.wordpress.com/2006/10/27/how-to-modify-the-vs2005-installer-to-set-the-asp-net-version-and-create-application-pools/

Вы можете использовать приведенный ниже код

public static bool IisInstalled()
        {
            try
            {
                using (RegistryKey iisKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\InetStp"))
                {
                    return (int)iisKey.GetValue("MajorVersion") >= 6;
                }
            }
            catch
            {
                return false;
            }
        }

Для получения дополнительной информации посетите: http://www.java2s.com/Code/CSharp/Windows/IIShelperisIISInstalledIISstateIISversion.htm

В .NET 4.5

HttpRuntime.IISVersion

Не требует пояснений ... Как определить версию IIS с помощью C#? Используйте httpRuntime.IISVersion.

h0ckey09 05.08.2014 00:16

Насколько я понимаю вопрос, OP ищет версию IIS при запуске установщика. HttpRuntime.IISVersion вернет null, если запущенное приложение не размещено в IIS, поэтому этот ответ, похоже, не помогает OP.

Beofett 28.03.2016 23:50

Другие вопросы по теме