Подтвердить что ты не робот

Программно определить, работает ли код под IIS Express

Я не уверен, что это возможно, но я надеюсь найти ключ к определению того, выполняется ли код, который выполняется в настоящее время под IIS Express. Мое наилучшее приближение до сих пор, которое невероятно хакерское и, безусловно, потерпит неудачу/сломается в какой-то момент:

bool IsExpress = 
  Request.ServerVariables["SERVER_SOFTWARE"] == "Microsoft-IIS/7.5"
  && Int32.Parse(Request.ServerVariables["INSTANCE_ID"]) > 1000000000;

Конечно, должен быть лучший способ. Мое рассмотрение объектов приложения, сервера и запроса не показало ничего, что могло бы обеспечить лучшее понимание. Возможно, мне просто нужно посмотреть на какой-нибудь другой объект?

Update:

Мне действительно любопытно, есть ли способ обнаружить это - на самом деле это академический момент. У меня нет жгучей необходимости использовать его. Оригинальный вопрос. Но в духе ответа на комментарии, в частности, я заинтересован в том, чтобы ответить на критику из другого вопроса/ответа на этом сайте: Как выполнить поиск на карте MIME на карте. Критика заключается в том, что опубликованный ответ не работает для IIS Express, но только для традиционных экземпляров IIS. IIS Express хранит MIME-конфигурацию в XML файле applicationhost.config, и я хотел бы обновить этот ответ, чтобы предоставить способ вернуть эту информацию для IIS Express. Я мог бы просто добавить код, который захватывает соответствующее значение из XML (Yay для LINQ to XML!), Но я бы очень хотел сделать его более умным. Чтобы быть ясным, мне не нужна помощь в анализе этого файла - просто что-то более элегантное, пытаясь определить, выполняется ли в настоящее время код в движке IIS Express.

Обновление 2:

IIS 8.0 Express Beta была выпущена на этой неделе, и это далее показывает, что подход в моем вопросе хрупкий и сломается. Несмотря на то, что это не является прерывателем сделки для конкретной версии, было бы неплохо учесть это и попытаться обеспечить, чтобы код работал по крайней мере с известными версиями сегодня.

4b9b3361

Ответ 1

Может ли проверка текущего имени процесса сделать трюк?

bool isExpress = 
  String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress") == 0;

Обычный IIS работает под w3wp.exe из памяти.

Ответ 2

Если вы не возражаете отказаться от API уровня COM, вы можете использовать API-интерфейс диспетчера версий IIS

http://msdn.microsoft.com/en-us/library/gg418429.aspx

Существует некоторая дискуссия о том, как это было использовано в этой SO-почте: Запуск и остановка IIS Express программно - не совсем то, что вы хотите, но они обсуждают используя API.

Изменить: я должен добавить, что я не пробовал это сам, но кажется многообещающим, удачи!

Ответ 3

Не можем ли мы попытаться выяснить, работает ли одно или несколько ограничение IIS Express, если это работает, это не IIS Express. Пример IIS Express не поддерживает службы sharepoint