Как определить, включен ли ASP.NET в IIS 7
Задача состоит в том, чтобы определить, включен ли ASP.NET в IIS7 надежным и правильным способом.
Включение/отключение выполняется в этом случае путем перехода на:
Server Manager ->
Roles ->
Web Server (IIS) ->
Remove Role Services ->
Remove ASP.NET
Естественное место для определения этого должно быть в файле applicationHost.config. Однако с включенным или отключенным ASP.NET у нас все еще есть доступный модуль ManagedEngine, и у нас все еще есть запись фильтра isapi в теге.
Лучшее, что я могу найти на данный момент, - проверить, есть ли <isapiCgiRestriction> тег включает aspnet_isapi.dll или что поставщик трассировки ASPNET доступен.
Однако они не обнаруживают присутствие конфигурации ASP.NET напрямую, просто побочный эффект, который может быть, возможно, перенастроен пользователем.
Я бы предпочел сделать это, изучив конфигурацию/настройку IIS, а не сама ОС, если это возможно, хотя перечисление ролей и служб на сервере может быть приемлемым, если мы можем гарантировать, что этот метод всегда будет работать, когда IIS7 б.
Обновление
Спасибо за ответы. Уточняя, что именно я хочу сделать, я вытаскиваю настройки из разных мест в конфигурации сервера в единое (только для чтения) представление, чтобы показать, что пользователь должен настроить для работы программного обеспечения.
Один из параметров, которые мне нужно внести, - это один:
![IIS Config showing ASP.NET not installed]()
Тот, который выделен красным цветом.
Мне не нужно манипулировать настройкой, просто воспроизведите ее. Я хочу узнать, проверил ли пользователь поле ASP.NET, когда они добавили роль IIS на сервер, так как в этом примере они явно этого не сделали.
Я хотел бы сделать это, посмотрев на что-то надежное в IIS, а не на перечисление сервисов роли, потому что я не хочу добавлять какие-либо зависимые от платформы зависимости от проверки, которая мне не нужна. Я не знаю, смогу ли когда-нибудь установить IIS7 на сервере, у которого нет инфраструктуры ролей/служб, но, предпочту, я бы не стал беспокоиться об этом. У меня также есть загрузка библиотек для очистки вокруг IIS уже.
Однако у меня также возникли проблемы с выяснением того, как перечислять роли/службы вообще, поэтому, если есть решение, которое включает в себя это, это, безусловно, будет полезно и намного лучше, чем проверка побочного эффекта Поставщик трассировки ASPNET.
К сожалению, если вы не проверите кнопку ASP.NET, вы все равно можете получить модуль ManagedEngine в файле applicationHost.config приложения IIS, чтобы он не был надежным. Вы также можете настроить ASP.NET как фильтр isapi, поэтому проверки их недостаточно. Эти проблемы особенно проблематичны в случае, когда ASP.NET был установлен, но был удален.
Похоже, что лучшим решением было бы изучить службы ролей. Однако информация API по этому поводу выглядит довольно редко, поэтому крик о помощи.
Ответы
Ответ 1
Абсолютный способ узнать, проверяли ли они это или нет, это поиск следующего раздела реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components
Здесь вы должны увидеть два значения, установленные как 1
, ASPNET
и NetFxEnvironment
и NetFxExtensibility
. Этот раздел реестра - это ключ установки IIS, содержащий все компоненты, которые были включены в IIS.
Ответ 2
Определение того, что asp.net - это даже установленная функция (предварительное условие для ее включения), может быть выполнена через PowerShell, что означает, что там есть .net api, если вы достаточно хорошо копаете. Методы PowerShell:
Import-Module servermanager
Get-WindowsFeature web-asp-net
Будет возвращен объект типа Microsoft.Windows.ServerManager.Commands.Feature
. Свойство installed
имеет значение boolean и указывает, установлена ли функция.
Ответ 3
Итак, вам нужен простой способ? Сделайте приятную симпатичную страницу .aspx, которая отображается как HTML с блоком ошибок в div в заполнителе, в котором говорится: "Вам нужно установить ASP.NET" и изменить его на ASP.NET, чтобы вместо этого сказать "Установлен ASP.NET", а затем просто запустите эту веб-страницу в браузере по умолчанию после копирования в каталог, указанный в IIS, как сайт *: 80 (или создайте сопоставление каталога в IIS программно, изменив XML и затем удалив его позже)
Не может быть самым элегантным, но он гарантирует, что тестирование показывает, какие функции действительно установлены в сравнении с файлом XML.
Потому что это будет кричать "сделай это ленивым неосведомленным способом", я напомню, что единственный способ узнать в javascript, какие функции я могу использовать, - проверить их, прежде чем я попытаюсь их использовать, или предположить, там и наблюдайте, как он взорвется. Я хочу сказать, что не имеет значения, что сообщается в файле, важно то, что вы действительно можете использовать. Просто потому, что существует C:\Windows\Micrsoft.Net\Framework\v3.xxxxxxxx и имеет файлы, не означает, что dll зарегистрированы в GAC, не так ли?