待機/閒置一段時間後彈出 `Dfrgfat.exe - 應用程式錯誤`,提示指令參考記憶體無法讀取。此為 Windows XP/2003 時代磁碟碎片整理排程器與 Prefetch/Layout.ini、WMI 儲存庫、COM 元件註冊異常交互導致的經典問題。本文提供由輕到重四階段修復方案。
錯誤特徵
- 錯誤模組:`Dfrgfat.exe` (磁碟碎片整理排程執行檔)。
- 例外代碼:`0xC0000005` (Access Violation)。
- 典型參數:`0x77c1741c` 參考 `0xef9b1162` 記憶體無法 `read`。
- 觸發時機:系統閒置觸發排程碎片整理、待機喚醒後。
階段一:清理 Prefetch Layout.ini (最輕量、成功率高)
- 以記事本開啟 `C:\Windows\Prefetch\Layout.ini`。
- 全選刪除內容 → 存檔。
- 右鍵 `Layout.ini` → 內容 → 勾選「唯讀」→ 確定 (防止重建錯誤內容)。
階段二:檢查啟動項與服務
- `Win+R` → `msconfig` → 「啟動」頁籤 → 尋找 `Dfrgfat`/`Defrag` 相關項目 → 取消勾選 → 套用。
- `services.msc` → 尋找「磁碟碎片整理」/「Task Scheduler」 → 確認啟動類型為「手動」非「自動」。
階段三:重新註冊系統 COM 元件 (核心修復)
- 以系統管理員身分開啟命令提示字元 (`cmd`)。
- 依序執行 (每行輸入後按 Enter,等待完成):
for %1 in (%windir%\system32\*.ocx) do regsvr32 /s %1
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
- 螢幕將快速滾動註冊訊息,待靜止後重新開機。
階段四:重建 WMI 儲存庫 (終極修復)
- `services.msc` → 「Windows Management Instrumentation」 → 停止服務。
- 刪除 `C:\Windows\System32\wbem\Repository\` 目錄下**所有檔案** (建議先備份至他處)。
- 重新啟動「Windows Management Instrumentation」服務 (系統將自動重建 Repository 並載入 `AutoRecover` MOFs)。
- 重新開機驗證錯誤是否消失。
補充:登錄檔快速部署 (適用批量機器)
Windows Registry Editor Version 5.00
; 禁用排程碎片整理 (若不需自動整理)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Defrag]
@=""
; 設定 Layout.ini 唯讀屬性需手動操作,登錄檔無法直接設定檔案屬性
驗證與預防
- 重開機後觀察 24-48 小時無錯誤彈窗即視為修復成功。
- 定期手動執行 `defrag C: /U /V` (Win10/11) 或 `defrag C: -v` (XP/2003) 替代排程任務。
- 保持系統更新 (Windows Update)、驅動更新、殺毒軟體排除 `Prefetch`/`wbem/Repository` 目錄掃描干擾。
此錯誤雖屬舊系統經典疑難雜症,但同類「排程任務觸發 COM 元件/ WMI 異常」模式在新版 Windows 仍可能出現 (如 `SysMain`/`Defrag`/`WSearch` 服務)。掌握「清理快取 → 重註冊 COM → 重建 WMI」三板斧,可橫掃大類記憶體存取違規錯誤。