【问题标题】:IIS ApplicationPool user has incorrect USERPROFILE / TEMP valueIIS ApplicationPool 用户的 USERPROFILE / TEMP 值不正确
【发布时间】:2023-03-14 09:05:01
【问题描述】:

我遇到了最初由 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

【问题讨论】:

    标签: iis applicationpoolidentity


    【解决方案1】:

    问题最终是setProfileEnvironment,它为每个应用程序池的工作进程隔离环境变量,在system.applicationHost/applicationPools/applicationPoolDefaults 上设置为false,尽管它是having a default value of true according to the documentation。由于没有一个应用程序池覆盖它,它们都接收到相同的值,因此共享公共环境变量。

    我不知道它是如何设置为 false 的,也不知道共享的 USERPROFILE 环境变量是如何设置为一个应用程序池而不是另一个,但是将默认值设置回 true 解决了这个问题。

    正是这个question/answer 帮助我找到了原因,尽管问题有所不同。

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 2022-11-02
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多