按下 APEX 啟動鍵。讀取畫面跑完。然後——藍屏,重啟。
再試一次。還是藍屏。
這個問題困擾我好一陣子了。頻率不固定,有時候連開三場沒事,有時候進遊戲讀完畫面就炸。因為不是每次都觸發,排查起來格外惱人——你沒辦法穩定重現,就很難判斷到底是哪裡出問題。
我走過的彎路
我一開始懷疑是熱當。APEX 吃資源本來就兇,我的 GPU 溫度跑到八九十度是常態,藍屏的時間點又剛好在遊戲載入高峰,看起來太像過熱了。
所以我先更新了顯示卡驅動。沒用。
接著我把 APEX 的相關路徑全部加進火絨的安全區,怕是防毒軟體跟 EasyAntiCheat 打架。也沒用。
問題就這樣斷斷續續,每隔幾天炸一次,炸完重開又能玩,讓人很難下定決心認真查。直到某天連續藍屏兩次,我受不了了,想到一件事——AI 現在不是很會讀 log 嗎?不如直接把事件日誌丟給它看。
這個決定救了我大概一整個晚上的時間。
BSOD 0x0000001a 是什麼
MEMORY_MANAGEMENT。聽起來嚇人,實際上這個停止碼涵蓋範圍很廣,代表 Windows 核心在管理記憶體時遇到嚴重的不一致狀態。
溫度、驅動、防毒——我之前懷疑的方向全錯了。真正在崩的不是遊戲本體,而是遊戲啟動時順帶拉起的一個系統服務。
問題在於時序:APEX 啟動 → 觸發某個元件 → 元件炸掉 → 核心記憶體狀態損壞 → BSOD。重裝遊戲不會動到那個元件,更新驅動也不會。
步驟一:用 PowerShell 查 BSOD 歷史
不猜了,直接看 log。Windows 事件日誌會把每一次 BSOD 記錄在 System 日誌裡,事件 ID 1001,訊息包含 bugcheck。
以系統管理員身份開啟 PowerShell:
1 | Get-WinEvent -LogName System -MaxEvents 5000 | Where-Object { |
這會列出最近所有藍屏的時間點和停止碼。我跑完發現有 4 筆紀錄,時間點跟我印象中藍屏的日子吻合。把這些時間記下來——這是診斷的錨點。
步驟二:建立崩潰前的時間軸
BSOD 本身只是結果。真正的線索藏在它發生前幾秒的應用程式錯誤裡。
用記下的 BSOD 時間往前推,查同段時間的應用程式錯誤:
1 | # 把 $bsodTime 換成實際的 BSOD 時間戳 |
重複這個查詢,把每一次 BSOD 前後都跑一遍。
跑完四次 BSOD 的前後時段,答案浮出來了:GameInputRedistService.exe 崩潰,錯誤碼 0xc0000005(Access Violation),每次都在 BSOD 前幾秒。4 次 BSOD,4 次都有同一個元件先掛掉。
我之前花時間查溫度、換驅動、設防毒白名單,結果元兇是一個我聽都沒聽過的服務。
步驟三:為什麼卸載沒用
知道是誰之後,第一反應當然是卸掉它。但你會發現它消失了——然後開一次 APEX,它又回來了。
APEX 使用 EasyAntiCheat,而 EAC 會在每次遊戲啟動時自動偵測並重新安裝 GameInputRedistService。你移除它,遊戲幫你裝回來,然後它再次崩潰。無限迴圈。
所以卸載不是解法。讓它存在但不啟動,才是。
步驟四:禁用服務
以系統管理員身份執行:
1 | Stop-Service -Name "GameInputRedistService" -Force |
第一行強制停止當前執行中的服務,第二行把啟動類型設為停用。服務本體還在,EAC 偵測到它存在所以不會重裝,但它不會自動啟動、不會崩潰、不會踩到核心記憶體。
一鍵修復腳本
我自己實際操作時就是直接打上面那兩行指令,但如果你想分享給不熟 PowerShell 的朋友,下面這個腳本加了檢查邏輯和中文提示,存成 fix-gameinput.ps1,右鍵「以系統管理員身份執行」就好:
1 | #Requires -RunAsAdministrator |
總結
禁用之後我連打了好幾天的 APEX,沒有再藍屏過,手把和其他輸入裝置也沒感覺到副作用。
回頭看這次排查,前前後後斷斷續續搞了不知道多久,最後真正找到原因只花了十分鐘。差別在於我之前一直在猜——猜溫度、猜驅動、猜防毒——而事件日誌不用猜,它把時間線攤在你面前。
三個步驟:
- 用事件日誌確定 BSOD 時間點——
Get-WinEvent查 ID 1001 - 往前查應用程式錯誤建立時間軸——找出每次崩潰前的共同元件
- 禁用問題服務而非卸載——停用
GameInputRedistService,讓它存在但不執行
下次不管是什麼遊戲碰到 BSOD,我大概都會直接從事件日誌開始查,不會再浪費時間猜了。
