IIS ApplicationPool用户具有不正确的USERPROFILE / TEMP值

时间:2017-01-23 01:16:48

标签: iis applicationpoolidentity

我遇到了一个问题,该问题最初由NULL抛出Microsoft.CSharp.CSharpCodeGenerator接收“拒绝访问”错误,试图写入不同的 IIS AppPool用户临时目录。

我有另一个应用程序实际上作为UnauthorizedAccessException: Access to c:\Users\[wrong-user]\AppData\Local\Temp AppPool运行,而该应用程序 工作。但是,这是有道理的,因为它具有对其自己的用户目录的写访问权。

我已将错误缩小到[wrong-user]返回其他IIS APPPOOL用户的路径这一事实,即使%USERPROFILE%返回正确的路径。< / p>

如果我列举Environment.GetFolderPath(SpecialFolder.UserProfile),我会得到:

  • 路径 - C:\ Users \ [wrong-user] \ AppData \ Local \ Microsoft \ WindowsApps;
  • TEMP - C:\ Users \ [wrong-user] \ AppData \ Local \ Temp
  • TMP - C:\ Users \ [wrong-user] \ AppData \ Local \ Temp

此外,通过Environment.GetEnvironmentVariables(User)手动访问用户的环境变量,确认它只是HKEY_USERS/[SID]/Environment不正确:

  • 路径 - %USERPROFILE%\ AppData \ Local \ Microsoft \ WindowsApps;
  • TEMP - %USERPROFILE%\ AppData \ Local \ Temp
  • TMP - %USERPROFILE%\ AppData \ Local \ Temp

1 个答案:

答案 0 :(得分:0)

问题最终导致setProfileEnvironment隔离了每个应用程序池的工作进程的环境变量,尽管false system.applicationHost/applicationPools/applicationPoolDefaults已设置为false USERPROFILE }}。由于没有任何应用程序池覆盖它,它们都收到相同的值,因此共享公共环境变量。

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

正是这个having a default value of true according to the documentation帮助我找到原因,尽管问题不同。