Подтвердить что ты не робот

IIS ApplicationPoolIdentity не имеет права на запись в "Временные файлы ASP.NET",

Я пытаюсь запустить веб-сайт из "AppPool" под названием "SomeAppPool", который использует "ApplicationPoolIdentity" , и когда я получаю следующую ошибку при запуске веб-сайта:

В текущем идентификаторе (IIS_APPPOOL\SomeAppPool) нет доступа на запись к 'c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files'

Я запускаю веб-сайт с помощью "Использовать локальный веб-сервер IIS" в Visual Studio 2012 (без приложения отладчика) под Windows 8.

Первое, что я заметил, это то, что папка "Временные файлы ASP.NET" даже не существуют, поэтому устанавливать разрешения безопасности не на что.

Вторая проблема: даже если бы была папка, какие разрешения я бы установил? Я предполагаю, что мне не нужно устанавливать разрешения для каждого пользователя, созданного с помощью "ApplicationPoolIdentity" . Правильно?

Существующие решения, которые я видел, просто предлагают установить для пользователя "Сетевую службу", но это, похоже, нарушает изоляцию веб-сайта, для которого "ApplicationPoolIdentity" был введен.

4b9b3361

Ответ 1

Этот ответ форума ASP.NET, неподтвержденный в его потоке, был для меня решением. Это также малоэффективно: оно не пытается перерегистрировать IIS или предоставить пользователю опасные привилегии. Подводя итог ответу:

  • Откройте командное окно в качестве администратора (Пуск/Программы/Аксессуары, затем щелкните правой кнопкой мыши над командной строкой, затем выберите "Запуск от имени администратора" ).
  • Введите следующую команду:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Aspnet_regiis.exe -ga domain\user
    

Подставьте ваш домен и пользователя для domain\user в приведенном выше примере. Это все, что нужно.

Документация Microsoft для Aspnet_regiis.exe здесь. Обратите внимание, что документация для переключателя -ga относится к ошибке в версиях 3.5 и более ранних версиях, где она не будет работать с локальными учетными записями. Если я правильно его читаю, учетные записи домена поддерживаются для всех версий, а локальные учетные записи поддерживаются начиная с Framework 4.0.


Обновление 6 июня 2017 года. Для Windows 8 и выше рассмотрите команду dism. Он покрыл этот ответ SO. Спасибо @codebrain за это.


Обновление 7 июля 2015 года: @Vertigo любезно прокомментировал, что этот ответ также работал на учетную запись NETWORK SERVICE в .NET 2.0 в 2008 R2/2012, поэтому мой отказ от правил о локальных учетных записях до 4.0 может быть неправильным.

Если кто-либо еще обнаружит, что это работает для локальной учетной записи под .NET 3.5 или ранее, не стесняйтесь редактировать мой ответ или отметить его в комментариях; это будет большой помощью для тех, кто может испытать эту же проблему.

Ответ 2

У меня была такая же проблема. Я проверил путь c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\, ищущий Temporary ASP.NET Files, но не было никакой папки по этому имени. поэтому я создал новую папку вручную и назвал ее Temporary ASP.NET Files и исправлена ​​проблема.

Поэтому убедитесь, что указанный путь существует.

Ответ 3

Наряду с принятыми решениями, пожалуйста, проверьте место на диске и убедитесь, что на нем достаточно свободного места на диске.

Я просто столкнулся с этой проблемой на одном из наших производственных серверов, и это было связано с низким дисковым пространством.

Ответ 4

Находясь в C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319, попробуйте запустить команду aspnet_regiis.exe.

Как правило, разрешения должны быть настроены. Если Windows "Установка и удаление программ" произойдет, или если будут установлены новые версии .NET, эти вещи будут немного меньше reset. Запуск aspnet_regiis.exe должен помочь там.

Кроме того, убедитесь, что вы используете Visual Studio в качестве администратора.

Ответ 5

Я просто столкнулся с этим, и я сделал, чтобы создать новую учетную запись, скажем, ее "Webby".

В ISS перейдите в "Предварительные настройки" вашей страницы и измените "Учетные записи физического пути" на учетную запись Webby. Поле Path выше, которое имеет каталог веб-страницы; откройте эту папку в проводнике и добавьте Webby с разрешениями Modify. В разделе "Трассировка неудачных запросов" есть каталог журналов; добавьте в него также изменения и установите для параметра "Включено" значение true (вы можете отключить его позже, но убедитесь, что он будет работать). На этом этапе вы можете попробовать свой сайт, и вы обязательно должны получить сообщение об ошибке из-за пользователя, которого используете.

В текущем тождестве (YOUR\Webby) нет доступа на запись к файлам C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET.

Теперь, чтобы исправить вашу проблему, вам нужно будет перейти в каталог "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files" и добавить к этому Webby также, снова Modify работы.

Решение использовать специальную учетную запись только для веб-сайтов - хорошая идея. Это реальная учетная запись (не виртуальная, как ApplicationPool), и Windows не путается (... как легко).

Надеюсь, что это поможет.