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





Вы можете получить эту информацию из переменной 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).
Проверьте заголовок 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 (даже если файл существует). Похоже, проблема с правами доступа к файлу.
Файл не найден 32-битным процессом на 64-битном сервере, поскольку inetsrc \ inetinfo.exe не существует в каталоге SysWOW64. Метод реестра jlafay работает во всех случаях, поскольку значение реестра присутствует как в 32-битном, так и в 64-битном разделах HKLM.
Я бы просто проверил версию ОС: 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!
Для установщика с настраиваемыми действиями: В представлении настраиваемого действия вы можете передавать данные в класс установщика клиента через атрибут CustomActionData в свойствах настраиваемого действия следующим образом: / iisv = "[IISVERSION]"
Проверять:
Вы можете использовать приведенный ниже код
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.
Насколько я понимаю вопрос, OP ищет версию IIS при запуске установщика. HttpRuntime.IISVersion вернет null, если запущенное приложение не размещено в IIS, поэтому этот ответ, похоже, не помогает OP.
На стороне сервера или на стороне клиента (например, вызов веб-службы IIS из приложения winforms)? Я думаю, вы имеете в виду серверную.