Пользователь 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
решил проблему.
Именно этот вопрос / ответ помог мне найти причину, несмотря на то, что проблема была в другом.