Ответ 1
Может ли проверка текущего имени процесса сделать трюк?
bool isExpress =
String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress") == 0;
Обычный IIS работает под w3wp.exe
из памяти.
Я не уверен, что это возможно, но я надеюсь найти ключ к определению того, выполняется ли код, который выполняется в настоящее время под 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 была выпущена на этой неделе, и это далее показывает, что подход в моем вопросе хрупкий и сломается. Несмотря на то, что это не является прерывателем сделки для конкретной версии, было бы неплохо учесть это и попытаться обеспечить, чтобы код работал по крайней мере с известными версиями сегодня.
Может ли проверка текущего имени процесса сделать трюк?
bool isExpress =
String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress") == 0;
Обычный IIS работает под w3wp.exe
из памяти.
Если вы не возражаете отказаться от API уровня COM, вы можете использовать API-интерфейс диспетчера версий IIS
http://msdn.microsoft.com/en-us/library/gg418429.aspx
Существует некоторая дискуссия о том, как это было использовано в этой SO-почте: Запуск и остановка IIS Express программно - не совсем то, что вы хотите, но они обсуждают используя API.
Изменить: я должен добавить, что я не пробовал это сам, но кажется многообещающим, удачи!
Не можем ли мы попытаться выяснить, работает ли одно или несколько ограничение IIS Express, если это работает, это не IIS Express. Пример IIS Express не поддерживает службы sharepoint