簡體   English   中英

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接收到“拒絕訪問”錯誤,試圖寫入另一個 IIS AppPool用戶的臨時目錄。

我有另一個應用程序實際上作為[wrong-user] AppPool運行,該應用程序確實有效。 但是,這是有道理的,因為它具有對其自己的用戶目錄的寫訪問權。

我已經將錯誤縮小到%USERPROFILE%返回不同IIS APPPOOL用戶的路徑這一事實,即使Environment.GetFolderPath(SpecialFolder.UserProfile)返回正確的路徑。

如果我枚舉Environment.GetEnvironmentVariables(User) ,我得到:

  • 路徑 - C:\\ Users \\ [wrong-user] \\ AppData \\ Local \\ Microsoft \\ WindowsApps;
  • TEMP - C:\\ Users \\ [wrong-user] \\ AppData \\ Local \\ Temp
  • TMP - C:\\ Users \\ [wrong-user] \\ 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 ,盡管它根據文檔具有默認值true 由於沒有任何應用程序池覆蓋它,它們都收到相同的值,因此共享公共環境變量。

我不知道它是如何設置為false ,也不知道如何將共享的USERPROFILE環境變量設置為一個應用程序池但從未設置為另一個應用程序池,但將默認值設置為true解決問題。

盡管問題不同,正是這個問題/答案幫助我找到了原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM