IIS ApplicationPool 用户的 USERPROFILE / TEMP 值不正确
IIS ApplicationPool user has incorrect USERPROFILE / TEMP value
我 运行 遇到了最初由 Microsoft.CSharp.CSharpCodeGenerator
抛出一个 UnauthorizedAccessException: Access to c:\Users\[wrong-user]\AppData\Local\Temp
试图写入 收到 "access denied" 错误所暴露的问题]different IIS AppPool 用户的临时目录。
我有另一个应用程序实际上 运行 作为 [wrong-user]
AppPool,并且该应用程序 确实 工作。然而,这是有道理的,因为它对自己的用户目录具有写访问权限。
我已将错误缩小到 %USERPROFILE%
正在返回不同 IIS APPPOOL 用户的路径这一事实,即使 Environment.GetFolderPath(SpecialFolder.UserProfile)
returns 正确 路径。
如果我枚举 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
问题最终是 setProfileEnvironment
,它为每个应用程序池的工作进程隔离了环境变量,在 system.applicationHost/applicationPools/applicationPoolDefaults
上被设置为 false
尽管 having a default value of true
according to the documentation .由于 none 个应用程序池覆盖了它,它们都收到相同的值,因此共享公共环境变量。
我不知道它是如何设置为 false
,也不知道共享的 USERPROFILE
环境变量是如何设置为一个应用程序池而不是另一个,而是将默认值设置回 true
解决了问题。
正是这个 question/answer 帮助我找到了原因,尽管问题有所不同。
我 运行 遇到了最初由 Microsoft.CSharp.CSharpCodeGenerator
抛出一个 UnauthorizedAccessException: Access to c:\Users\[wrong-user]\AppData\Local\Temp
试图写入 收到 "access denied" 错误所暴露的问题]different IIS AppPool 用户的临时目录。
我有另一个应用程序实际上 运行 作为 [wrong-user]
AppPool,并且该应用程序 确实 工作。然而,这是有道理的,因为它对自己的用户目录具有写访问权限。
我已将错误缩小到 %USERPROFILE%
正在返回不同 IIS APPPOOL 用户的路径这一事实,即使 Environment.GetFolderPath(SpecialFolder.UserProfile)
returns 正确 路径。
如果我枚举 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
问题最终是 setProfileEnvironment
,它为每个应用程序池的工作进程隔离了环境变量,在 system.applicationHost/applicationPools/applicationPoolDefaults
上被设置为 false
尽管 having a default value of true
according to the documentation .由于 none 个应用程序池覆盖了它,它们都收到相同的值,因此共享公共环境变量。
我不知道它是如何设置为 false
,也不知道共享的 USERPROFILE
环境变量是如何设置为一个应用程序池而不是另一个,而是将默认值设置回 true
解决了问题。
正是这个 question/answer 帮助我找到了原因,尽管问题有所不同。