首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

IIS Express Worker Process 停止工作:常見原因與排查步驟

     編輯:程式設計疑難解答

Visual Studio 偵錯 ASP.NET 專案時出現「iis Express Worker Process 已停止工作」,通常是**非受控代碼崩潰(C++/CLI、P/Invoke、第三方 DLL)**、**堆疊溢位**、**存取違規**或**反惡意軟體誤攔**。本文提供系統性排查流程。

錯誤現象分類

現象可能原因關鍵線索
啟動專案即崩潰全域靜態變數初始化、Native 模組載入失敗事件檢視器 `Application` 日誌:`Faulting module: clr.dll / ntdll.dll / 第三方.dll`
特定頁面/操作崩潰非受控代碼、P/Invoke 參數錯誤、記憶體洩漏崩潰堆疊含 `Transition from managed to unmanaged`
隨機間歇性崩潰多執行緒競態、GC 壓力大、大物件堆 (LOH) 碎片記憶體用量飆升、Gen 2 GC 頻繁
安裝 360/騰訊電腦管家後崩潰安全軟體注入 DLL、攔截 CLR 執行模組列表含 `360safe.dll`、`QQPCMgr.dll`、`ShellExt.dll`

標準排查步驟

  1. 查看 Windows 事件檢視器:
    eventvwr.msc → Windows 記錄 → Application
    來源: Application Error
    事件 ID: 1000
    記下:Faulting application name: iisexpress.exe
    Faulting module name: <關鍵模組>
    Exception code: 0xc0000005 (Access Violation) / 0xc00000fd (Stack Overflow)
  2. 啟用非受控偵錯:
    VS → 專案屬性 → Web → 偵錯器 → 勾選 "啟用非受控代碼偵錯"
    重新偵錯,崩潰時會中斷在原生碼呼叫堆疊
  3. 捕獲記憶體傾印:
    # 系統層面
    控制台 → 系統 → 進階系統設定 → 進階 → 啟動和故障恢復 → 設定
    寫入偵錯資訊:完整記憶體傾印 / 核心記憶體傾印
    
    # 或用 Procdump
    procdump -ma -e 1 -f "" -w iisexpress.exe
  4. 分析傾印:WinDbg / Visual Studio 開啟 `.dmp` → `!analyze -v` → 看 `FAULTING_IP`、`STACK_TEXT`
  5. 檢查第三方 Native 依賴:`bin/` 目錄下 `.dll` 是否對應正確架構 (x86/x64)、版本衝突、缺少 VC++ Runtime

常見修復方案

原因修復
安全軟體注入 (360/騰訊/火綿等)**卸載或加入白名單**:`C:\Program Files\IIS Express\iisexpress.exe`、`專案輸出目錄`
P/Invoke 簽名錯誤檢查 `CallingConvention`、`CharSet`、`MarshalAs`、結構體對齊 `StructLayout(LayoutKind.Sequential)`
堆疊溢位遞迴深度過大 → 改迭代;或增加執行緒堆疊 `Thread(new ThreadStart(...), 1024*1024)`
存取違規 (0xC0000005)非受控碼解參考 null 指標 → 加入空值檢查、啟用 `/RTC` 檢查、使用 SafeHandle
VC++ Runtime 缺失/版本錯誤安裝 Visual C++ Redistributable 2015-2022 (x86/x64)
專案目標架構不匹配專案屬性 → Build → Platform target:明確選 x86 或 x64,勿用 "Prefer 32-bit" 混淆

快速驗證:排除安全軟體干擾

# 1. 任務管理器 → 詳細資料 → 找 iisexpress.exe → 右鍵 → 開啟檔案位置
# 2. 將該資料夾加入安全軟體「信任區/白名單」
# 3. 重啟 VS、清理解決方案、重新建置、偵錯

替代方案:改用 Kestrel / Docker

  • ASP.NET Core 專案預設用 **Kestrel**,不依賴 IIS Express,穩定性高得多
  • 舊版 ASP.NET Framework 可嘗試 **Docker Windows 容器** 運行
  • VS 2022+ 建議直接用 **IIS Express 10+** 並保持更新

核心排查路徑:**事件檢視器 → 非受控偵錯 → 記憶體傾印 → WinDbg 分析 → 定位 Faulting Module → 修復/移除該模組**。90% 情況為第三方 Native DLL 或安全軟體注入導致。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved