按下 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
2
3
Get-WinEvent -LogName System -MaxEvents 5000 | Where-Object {
$_.Id -eq 1001 -and $_.Message -match "bugcheck"
} | Select-Object TimeCreated, Message | Format-List

這會列出最近所有藍屏的時間點和停止碼。我跑完發現有 4 筆紀錄,時間點跟我印象中藍屏的日子吻合。把這些時間記下來——這是診斷的錨點。


步驟二:建立崩潰前的時間軸

BSOD 本身只是結果。真正的線索藏在它發生前幾秒的應用程式錯誤裡。

用記下的 BSOD 時間往前推,查同段時間的應用程式錯誤:

1
2
3
4
5
6
7
8
# 把 $bsodTime 換成實際的 BSOD 時間戳
$bsodTime = [datetime]"2026-04-08 21:30:00"
$start = $bsodTime.AddMinutes(-2)
$end = $bsodTime.AddSeconds(5)

Get-WinEvent -LogName Application | Where-Object {
$_.TimeCreated -ge $start -and $_.TimeCreated -le $end -and $_.Level -le 2
} | Select-Object TimeCreated, ProviderName, Id, Message | Format-List

重複這個查詢,把每一次 BSOD 前後都跑一遍。

跑完四次 BSOD 的前後時段,答案浮出來了:GameInputRedistService.exe 崩潰,錯誤碼 0xc0000005(Access Violation),每次都在 BSOD 前幾秒。4 次 BSOD,4 次都有同一個元件先掛掉。

我之前花時間查溫度、換驅動、設防毒白名單,結果元兇是一個我聽都沒聽過的服務。


步驟三:為什麼卸載沒用

知道是誰之後,第一反應當然是卸掉它。但你會發現它消失了——然後開一次 APEX,它又回來了。

APEX 使用 EasyAntiCheat,而 EAC 會在每次遊戲啟動時自動偵測並重新安裝 GameInputRedistService。你移除它,遊戲幫你裝回來,然後它再次崩潰。無限迴圈。

所以卸載不是解法。讓它存在但不啟動,才是。


步驟四:禁用服務

系統管理員身份執行:

1
2
Stop-Service -Name "GameInputRedistService" -Force
Set-Service -Name "GameInputRedistService" -StartupType Disabled

第一行強制停止當前執行中的服務,第二行把啟動類型設為停用。服務本體還在,EAC 偵測到它存在所以不會重裝,但它不會自動啟動、不會崩潰、不會踩到核心記憶體。


一鍵修復腳本

我自己實際操作時就是直接打上面那兩行指令,但如果你想分享給不熟 PowerShell 的朋友,下面這個腳本加了檢查邏輯和中文提示,存成 fix-gameinput.ps1,右鍵「以系統管理員身份執行」就好:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#Requires -RunAsAdministrator

$serviceName = "GameInputRedistService"

Write-Host "正在停止 $serviceName 服務..." -ForegroundColor Yellow

$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinue

if ($null -eq $service) {
Write-Host "服務不存在,可能尚未安裝。請先開啟一次 APEX 讓服務安裝完成後再執行此腳本。" -ForegroundColor Red
exit 1
}

# 停止服務
if ($service.Status -eq "Running") {
Stop-Service -Name $serviceName -Force
Start-Sleep -Seconds 2
}

# 禁用服務
Set-Service -Name $serviceName -StartupType Disabled

# 驗證結果
$updated = Get-Service -Name $serviceName
Write-Host ""
Write-Host "完成!服務狀態:" -ForegroundColor Green
Write-Host " 名稱:$($updated.Name)"
Write-Host " 狀態:$($updated.Status)"
Write-Host " 啟動類型:$($updated.StartType)"
Write-Host ""
Write-Host "現在可以開啟 APEX 測試了。" -ForegroundColor Cyan

總結

禁用之後我連打了好幾天的 APEX,沒有再藍屏過,手把和其他輸入裝置也沒感覺到副作用。

回頭看這次排查,前前後後斷斷續續搞了不知道多久,最後真正找到原因只花了十分鐘。差別在於我之前一直在猜——猜溫度、猜驅動、猜防毒——而事件日誌不用猜,它把時間線攤在你面前。

三個步驟:

  1. 用事件日誌確定 BSOD 時間點——Get-WinEvent 查 ID 1001
  2. 往前查應用程式錯誤建立時間軸——找出每次崩潰前的共同元件
  3. 禁用問題服務而非卸載——停用 GameInputRedistService,讓它存在但不執行

下次不管是什麼遊戲碰到 BSOD,我大概都會直接從事件日誌開始查,不會再浪費時間猜了。