事件查看器中反覆出現:
事件 ID: 54
來源: HTTP
描述: 事件 ID ( 54 ) 的描述 (在資源 ( HTTP ) 中) 無法找到... \Device\Http\AppPool...
網上流傳的「關閉應用程序池回收設置」方案**治標不治本**。經實測驗證,**真正根因是 C:\Windows\Temp 目錄權限缺失**,導致 HTTP.sys 內核模式驅動無法寫入臨時數據/快取,拋出事件 ID 54。
常見錯誤建議:禁用「回收工作進程(分鐘)」、「回收工作進程(請求數)」、「CPU 監視」。
C:\Windows\Temp 創建臨時文件/快取IIS_WPG, Network Service, ApplicationPoolIdentity) **缺乏該目錄寫入權限**icacls C:\Windows\Temp
正常應包含:BUILTIN\IIS_IUSRS:(OI)(CI)(F), NT AUTHORITY\NETWORK SERVICE:(OI)(CI)(F), CREATOR OWNER:(OI)(CI)(IO)(F), SYSTEM:(OI)(CI)(F), BUILTIN\Administrators:(OI)(CI)(F)
# 確保繼承啟用 icacls C:\Windows\Temp /inheritance:e # 添加 IIS_IUSRS (應用程序池默認組) 完全控制 icacls C:\Windows\Temp /grant "IIS_IUSRS:(OI)(CI)F" /T # 添加 NETWORK SERVICE (經典模式/舊版兼容) 完全控制 icacls C:\Windows\Temp /grant "NETWORK SERVICE:(OI)(CI)F" /T # 添加 IUSR (匿名用戶,某些場景需要) 讀寫 icacls C:\Windows\Temp /grant "IUSR:(OI)(CI)R" /T icacls C:\Windows\Temp /grant "IUSR:(OI)(CI)W" /T # 確保 Everyone 有基本讀寫(可選,視安全策略) # icacls C:\Windows\Temp /grant "Everyone:(OI)(CI)R" /T # icacls C:\Windows\Temp /grant "Everyone:(OI)(CI)W" /T> **關鍵點**:
(OI)(CI) 表示**物件繼承 + 容器繼承**,即對目錄及其所有子項生效。/T 遞歸處理現有子項。
icacls C:\Windows\Temp | findstr "IIS_IUSRS NETWORK_SERVICE IUSR"
iisreset /restart # 或僅重啟 HTTP 服務 (需管理員權限) net stop http & timeout 5 & net start http
**觀察事件查看器**:非高峰期重啟後,**事件 ID 54 徹底消失**。若高峰期仍偶現,說明並發極高時臨時文件衝突,可進一步優化:
D:\Temp),避開系統盤壓力php.ini 設置 upload_tmp_dir = D:\Tempweb.config 設置 <httpRuntime tempDirectory="D:\Temp" />%SystemRoot%\TempApplicationPoolIdentity (虛擬帳戶 IIS AppPool\PoolName) 運行,屬於 IIS_IUSRS 組IIS 事件 ID 54 **不是回收設置問題,是 Temp 目錄權限問題**。**給 IIS_IUSRS 和 NETWORK SERVICE 補上 C:\Windows\Temp 的完全控制權限 (含繼承),重啟 IIS,警告即刻歸零**。這是微軟官方知識庫 (KB 919783 等) 確認的根因修復,比網上流傳的「關閉回收」專業、徹底、安全得多。