Как определить, включен ли 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, не так ли?