Пользователь IIS ApplicationPool имеет неправильное значение USERPROFILE / TEMP

Я столкнулся с проблемой, которая была первоначально выявлена Microsoft.CSharp.CSharpCodeGenerator бросать UnauthorizedAccessException: Access to c:\Users\[wrong-user]\AppData\Local\Temp при получении сообщения об ошибке "доступ запрещен" при попытке записи во временный каталог другого пользователя IIS AppPool.

У меня есть другое приложение, которое на самом деле работает как [wrong-user] AppPool, и это приложение работает. Тем не менее, это имеет смысл, так как он имеет доступ на запись в свой собственный каталог пользователя.

Я сузил ошибку до того факта, что %USERPROFILE% возвращает путь другому пользователю IIS APPPOOL, даже если Environment.GetFolderPath(SpecialFolder.UserProfile) возвращает правильный путь.

Если я перечислю Environment.GetEnvironmentVariables(User), Я получил:

  • Путь - C:\Users\[неправильный пользователь] \ AppData \ Local \ Microsoft \ WindowsApps;
  • TEMP - C:\Users\[неправильный пользователь]\AppData\Local\Temp
  • TMP - C:\Users\[неправильный пользователь]\AppData\Local\Temp

Кроме того, ручной доступ к переменным среды пользователя через HKEY_USERS/[SID]/Environment подтверждает, что это просто до %USERPROFILE% быть неверным:

  • Путь -% USERPROFILE% \ AppData \ Local \ Microsoft \ WindowsApps;
  • TEMP -% USERPROFILE% \ AppData \ Local \ Temp
  • TMP -% USERPROFILE% \ AppData \ Local \ Temp

1 ответ

Решение

Проблема закончилась тем, что setProfileEnvironment, который изолирует переменные среды для рабочих процессов каждого пула приложений, был установлен в false на system.applicationHost/applicationPools/applicationPoolDefaults несмотря на то, что имеет значение по умолчанию true согласно документации. Поскольку ни один из пулов приложений не переопределял его, все они получили одинаковое значение и, таким образом, использовали общие переменные среды.

Я понятия не имею, как это было установлено false ни как поделились USERPROFILE Переменная окружения была установлена ​​в один пул приложений, но не в другой, но установив значение по умолчанию обратно true решил проблему.

Именно этот вопрос / ответ помог мне найти причину, несмотря на то, что проблема была в другом.

Другие вопросы по тегам