Avatar ·

Ошибка "Unable to access the IIS metabase" при запуске ASP.NET приложения

Всем привет! Я начинающий C# разработчик, работаю над ASP.NET Web Forms проектом на .NET Framework 4.7.2. Вчера всё работало нормально, но сегодня при попытке запустить приложение из Visual Studio 2022 через IIS Express (или локальный IIS — не уверен точно) я получаю ошибку: "Unable to access the IIS metabase. You do not have sufficient privileges to access IIS metabase on your machine." Ошибка появляется сразу после компиляции, когда студия пытается открыть браузер. Я не менял никаких настроек, не удалял папки, не трогал IIS. Вот мой простой код в Global.asax.cs, который вряд ли может быть причиной: ```csharp public class Global : HttpApplication { void Application_Start(object sender, EventArgs e) { // Code that runs on application startup BundleConfig.RegisterBundles(BundleTable.Bundles); RouteConfig.RegisterRoutes(RouteTable.Routes); } } ``` Я запускаю проект с правами администратора (Visual Studio запущена от имени администратора), но это не помогает. Версия Windows — Windows 10 Pro. IIS установлен, но я его не трогал. Пожалуйста, подскажите, что делать? Может быть, нужно переустановить IIS или Visual Studio? Боюсь потерять проект. Заранее спасибо! <<>>

Причина ошибки

Ошибка "Unable to access the IIS metabase" возникает, когда ваш проект настроен на использование локального IIS (не IIS Express), но у текущего пользователя Windows нет прав на чтение метабазы IIS. Метабаза — это хранилище конфигурации IIS (для IIS 6 и старше) или файл applicationHost.config (для IIS 7+). Visual Studio пытается получить доступ к этому файлу, чтобы зарегистрировать ваше приложение, но система блокирует доступ.

Решение: переключение на IIS Express

Самый простой и безопасный способ — переключить проект обратно на IIS Express. Вот пошаговая инструкция:

  1. Закройте Visual Studio.
  2. Откройте файл проекта (с расширением .csproj) в любом текстовом редакторе (например, Notepad++).
  3. Найдите строку, содержащую <UseIIS> или <UseIISExpress>. Обычно она выглядит так:
<UseIIS>True</UseIIS>
<UseIISExpress>False</UseIISExpress>

Измените значения на:

<UseIIS>False</UseIIS>
<UseIISExpress>True</UseIISExpress>
  1. Сохраните файл и закройте редактор.
  2. Откройте проект в Visual Studio снова.
  3. Нажмите Ctrl+F5 для запуска. Приложение должно запуститься без ошибок.

Альтернативное решение: дать права на IIS метабазу

Если вам обязательно нужно использовать локальный IIS (например, для отладки с реальными настройками IIS), выполните следующие шаги:

  1. Запустите командную строку от имени администратора.
  2. Выполните команду для предоставления прав вашему пользователю:
%windir%\system32\inetsrv\appcmd set config /section:system.applicationHost /section:system.webServer /section:system.ftpServer /section:system.smtpServer /commit:apphost

Или, если у вас IIS 6 (что маловероятно на Windows 10), используйте:

cscript %windir%\system32\adsutil.vbs SET /W3SVC/AnonymousUserName "NT AUTHORITY\NETWORK SERVICE"
  1. Проверьте, что ваш пользователь входит в группу IIS_IUSRS. Для этого:
    • Нажмите Win+R, введите lusrmgr.msc.
    • Перейдите в "Группы" → "IIS_IUSRS" → "Добавить".
    • Добавьте вашу учётную запись Windows.
  2. Перезагрузите компьютер или перезапустите службу IIS (iisreset в командной строке администратора).

Дополнительные советы

  • Убедитесь, что у вас установлен компонент "Службы IIS" в Windows: Панель управления → Программы и компоненты → Включение или отключение компонентов Windows. Должны быть отмечены хотя бы базовые компоненты, включая "Консоль управления IIS".
  • Если вы используете Visual Studio 2022, попробуйте сбросить настройки IIS Express: закройте студию, удалите папку %userprofile%\Documents\IISExpress и запустите проект снова.
  • В редких случаях помогает переустановка Visual Studio с опцией "Восстановление" (Repair) из установщика.

После выполнения этих шагов ошибка должна исчезнуть. Если проблема остаётся — проверьте, не блокирует ли антивирус доступ к конфигурационным файлам IIS.

<<>>

Дополнительный подход: использование netsh для прав доступа

Если предыдущие методы не помогли, проблема может быть связана с тем, что ваш пользователь не имеет права на прослушивание HTTP-трафика (URL reservation). Это актуально для Windows 10 и выше, где требуется явное разрешение.

Решение через netsh

  1. Откройте командную строку от имени администратора.
  2. Выполните команду для добавления вашего пользователя в список разрешённых:
netsh http add urlacl url=http://localhost:12345/ user=ИМЯ_ВАШЕГО_ПОЛЬЗОВАТЕЛЯ

Замените localhost:12345 на порт, который использует ваше приложение (узнать можно в свойствах проекта → Web → Project Url).

  1. Если вы не знаете точный порт, можно добавить сразу диапазон:
netsh http add urlacl url=http://+:80/ user=ИМЯ_ПОЛЬЗОВАТЕЛЯ

Проверка существующих разрешений

Чтобы увидеть, какие URL уже зарезервированы, выполните:

netsh http show urlacl

Найдите строку с вашим портом. Если там указан только NT SERVICE\ALL SERVICES или BUILTIN\Administrators, добавьте свою учётную запись.

Этот метод особенно полезен, если вы работаете в корпоративной среде, где права на IIS ограничены политиками безопасности.