Есть ли у кого-нибудь пуленепробиваемый метод (в идеале на С#!) определения правильности регистрации ASP.Net на вашем компьютере?

Я пишу программу установки для приложения ASP.Net, и мне нужно знать, следует ли запускать aspnet_regiis.

На данный момент мы всегда запускаем aspnet_regiis - I, чтобы убедиться, что ASP.Net зарегистрирован правильно, но это нежелательно, поскольку вызывает перезапуск всех пулов приложений.

В Интернете есть несколько полезных страниц (например, http://www.codeproject.com/ KB/cs/iisdetection.aspx), но, как показывают комментарии в этом сообщении, довольно часто реестр сообщает, что ASP.Net зарегистрирован, но aspnet_regiis все еще необходимо запустить для настройки ИИС. Пользователь «JonB» опубликовал что-то похожее на то, что это должно работать для IIS6 (и IIS7 с включенной совместимостью с IIS6), но мне все равно нужно написать отдельный код обнаружения для IIS 7 с отключенным режимом совместимости с IIS6.

Так кто-нибудь уже расколол этот орех? Если это так, сообщите нам об этом, так как это сэкономит время. В противном случае я попытаюсь перенести решение C++ на C# для IIS6, а для IIS7 я рассмотрю раздел <isapiCgiRestriction> applicationHosts.config для

<add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />

Последний вопрос...

Кто-нибудь знает, в Windows 7 все то же самое или другое?

28
Chris Fewtrell 3 Июл 2009 в 11:31

2 ответа

Сначала я бы попробовал запустить aspnet_regiis -lv. Это должно дать вам вывод, например:

1.1.4322.0      Valid           C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
2.0.50727.0     Valid           c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

Который вы можете легко проанализировать, чтобы убедиться, что ваша целевая версия установлена ​​и действительна. Если это не так, вам придется пойти по маршруту aspnet_regiis -i.

Кроме того, учитывая, что вы можете выполнить эту проверку на C#, вы можете добавить тестовую страницу в свое приложение ASP.NET. После того, что вы обычно считаете успешной установкой, выполните HttpWebRequest на этой тестовой странице. Сама страница может быть как простой, как пустая страница, так и сложной, как запуск самопроверки установки (права доступа к файлам/папкам, конфигурация БД и т. д.) и будет возвращать HTTP 200 только в том случае, если все в порядке. Любой тайм-аут или ошибка указывает на неправильную установку. Затем, при желании, удалите тестовую страницу.

10
Gonzalo 16 Ноя 2009 в 05:48

Этот фрагмент работает для IIS7+

using Microsoft.Web.Administration;   

private static string[] ARR_STR_SUPPORTED_APP_POOLS = 
                         { "ASP.NET v4.0", "ASP.NET v4.5", ".NET v4.5", ".NET v4.0" };

public static ApplicationPool GetFirstSupportedAppPoolInstalled(this ServerManager mgr, IEnumerable<string> supportedAppPools)
{
    ApplicationPool result = null;
    foreach (string appPoolName in supportedAppPools)
    {
        result = mgr.ApplicationPools[appPoolName];
        if (result != null)
            break;
    }
    return result;
}

...
using (var mgr = new ServerManager())
{
   if (!mgr.IISAccessCheck())
      throw new ApplicationException("Error trying to access IIS 7!");

   ApplicationPool appPool = mgr.GetFirstSupportedAppPoolInstalled(ARR_STR_SUPPORTED_APP_POOLS);
   if (appPool == null)
       throw new ApplicationException("No appropriate .NET application pool found!");

   // you can do something with the app pool, if needed
}
...

Вы можете настроить его по своему усмотрению.

0
Learner 4 Апр 2014 в 17:19