⚡ 站長快讀:核心重點
- 文章屬性:教學實戰
- 適用系統:Windows 11 以上 / Server 2016 以上(v17.13)
- 難易度 / 耗時:中偏進階(步驟六含 ⭐⭐⭐)/ 約 25 分鐘
- 核心結論:靠行程樹、handle 檢視、DLL 檢視三層訊號判讀,而不是只看資源數字。
- 適用對象:檔案刪不掉、懷疑中招的使用者與 IT 人員
📌 快速答案
一句話答案:Process Explorer 用「Find Handle or DLL」搜尋鎖定檔案的行程,再以行程樹挑出異常程序、切到 DLL 檢視,搭配數位簽章與 VirusTotal 欄位判讀可疑 DLL。
🧰 開始前的準備
- 需要工具:
- Process Explorer v17.13(ZIP 約 3.4 MB,免安裝)
- 選配:Handle v5.0(命令列 handle 檢視器,729 KB)
- 選配:ListDLLs v3.2(命令列 DLL 檢視器,307 KB)
- 權限需求:Process Explorer 本身不需要系統管理員權限即可執行,但要看到其他使用者帳號底下的行程細節、跨行程搜尋 handle、關閉他人行程的 handle,就必須提權(此權限分界依 Process Explorer 之 File → Show Details for All Processes 選單行為與權威來源整理,官方線上下載頁未逐項載明);命令列版 Handle 則是官方明載「必須具備系統管理員權限」
- 開工前先做的三件事:①把要救的檔案路徑或可疑檔名先抄下來,搜尋時要用;②若打算動用命令列的 Handle 與 ListDLLs,先把兩支工具一起解壓縮到同一個資料夾;③開一份記事本記錄看到的 PID 與路徑——行程隨時會結束,截圖或抄下來才留得住線索
- ⚠️ 先讀再動手:步驟六牽涉關閉 handle 與結束行程,請務必先讀完該節的警語與停止條件
🔍 為什麼你需要這個?
那個「檔案正在另一個程式中開啟」的對話框,大概是 Windows 上最沒有資訊量的錯誤訊息之一:它知道誰鎖住了檔案,卻偏偏不告訴你。工作管理員也幫不上忙——它給的是 CPU、記憶體、磁碟三根柱子,能回答「誰在吃資源」,卻回答不了「誰持有這個檔案」「這支看起來正常的行程裡面載入了什麼」。
而後面這兩個問題,恰好是清惡意程式時最關鍵的兩個。現代的惡意程式很少大剌剌地開一支叫做 virus.exe 的行程,它更常做的是把自己編譯成 DLL,想辦法讓一支有正常數位簽章的宿主行程去載入它。你在工作管理員裡看到的是簽章齊全的系統行程,實際跑的卻是別人的程式碼。
Process Explorer 補的正是這一層。Microsoft 官方對它的定位很直白:它顯示行程開啟了哪些 handle、載入了哪些 DLL,並且具備強大的搜尋能力,可以快速找出哪些行程開啟了特定 handle 或載入了特定 DLL——官方也點名,這些能力讓它特別適合追查 DLL 版本問題與 handle 洩漏。
本文的差異化角度先講在前面,免得你讀到一半才發現不是想找的東西:(1) 用 handle 搜尋跨行程反查鎖檔者,並對照命令列 Handle 做批次化;(2) 用行程樹、擁有者帳號與映像路徑先篩出異常的程序本身,再往下追它載入的 DLL,並用 ListDLLs 反查全系統的未簽章模組;(3) 把 VirusTotal 整合用對——它預設送出的是雜湊而不是檔案,而這個差別牽涉到你的機密資料會不會被公開。
如果你要找的是「哪個程式在狂寫硬碟」,那是 Windows 資源監視器(resmon) 的守備範圍;如果你要的是「把每一次檔案與登錄檔存取逐筆錄下來」,那該用 ProcMon 的篩選與 Boot Logging。Process Explorer 管的是「此時此刻,這些行程手上握著什麼」。
🛠️ 實戰步驟

步驟一:取得並啟動 Process Explorer
Process Explorer 不需要安裝。到 Microsoft Learn 的官方頁面下載 ProcessExplorer.zip(約 3.4 MB),解壓縮後直接執行 procexp.exe 即可——官方安裝說明的核心只有一句:「Simply run Process Explorer (procexp.exe)」。只有要看懂執行緒堆疊(需要把位址解析成函式名稱)時才需要另外設定符號路徑,本文的 handle 與 DLL 排查用不到。
如果是在別人的電腦上臨時救火、不方便留下檔案,官方另外提供 Sysinternals Live:直接執行 https://live.sysinternals.com/procexp.exe 就能跑最新版,不用先下載。
第一次開啟請務必用 右鍵 → 以系統管理員身分執行。沒有提權的話,其他使用者帳號底下的行程細節會看不到,後面的 handle 搜尋也會漏掉一大半結果。
順帶一提版本:目前官方版本是 v17.13,發布日 2026-08-12,這一版新增了 Intel CPU 的核心類型資訊。整個 v17 世代的大改版是 2022-10-26 的 v17.0,當時加入了深色佈景主題、主視窗多窗格與新的執行緒窗格,以及啟動效能最佳化。
步驟二:先把下窗格與判讀欄位設定好
Process Explorer 的畫面分成上下兩個子視窗。上窗格永遠是目前作用中的行程清單,含各行程的擁有者帳號;下窗格則看模式而定:handle 模式顯示上面所選行程已開啟的 handle,DLL 模式顯示該行程已載入的 DLL 與記憶體對應檔案。這個「上選行程、下看細節」的結構,是官方對這個工具最核心的描述,也是後面每一步的操作基礎。
先做三件事,之後每次開起來都受用:
- 確認下窗格已開啟,並在 handle 檢視與 DLL 檢視之間切換一次,感受兩者差別(View → Lower Pane View)。
- 開啟簽章驗證:讓 Process Explorer 對映像檔做數位簽章驗證,清單上就會多出「已驗證的簽署者」資訊。沒有簽章、或簽署者是沒聽過的名字,是第一個要留意的訊號。
- 開啟 VirusTotal 欄位:Options → VirusTotal.com → Check VirusTotal.com(此選單路徑依 Process Explorer 內建說明檔與實機介面,官方線上下載頁未逐項列出選單)。啟用後會多出一個 VirusTotal 欄位,對每支行程顯示比數形式的判定結果,結果本身是超連結,點下去會帶到 VirusTotal.com 的報告頁。
💡 為什麼要這樣做? VirusTotal 整合是 Process Explorer v16.0 與 VirusTotal 團隊合作導入的功能。它之所以快,是因為預設只送出映像檔與 DLL 的雜湊值,而不是檔案本身——雜湊是內容的唯一識別碼,VirusTotal 收到後去查「這個雜湊先前被掃過嗎」,有的話回報幾家防毒引擎判定為可疑。這個設計對隱私很關鍵,請務必看完步驟六的紅線說明再決定要不要按下「提交檔案」。
步驟三:找出誰鎖住了你的檔案
這是 Process Explorer 最常被用到、也最像魔法的一招。
在主視窗按 Find → Find Handle or DLL(快捷鍵 Ctrl+F),在搜尋框輸入檔名或路徑片段——例如刪不掉的檔案叫 report.xlsx,就輸入 report.xlsx;整個資料夾被鎖住就輸入資料夾名稱。搜尋結果會列出所有持有相符 handle 的行程,雙擊任一筆,主視窗會自動跳到該行程並在下窗格選中那個 handle。
搜尋是子字串比對,所以只要輸入路徑中夠獨特的一段就好。整個目錄被鎖住時,輸入目錄名稱通常比輸入完整路徑更容易命中。
如果要把這件事自動化或寫進腳本,官方的命令列版 Handle 更順手。以系統管理員身分開啟終端機後:
# 找出哪個行程持有含 "report.xlsx" 的 handle
handle.exe report.xlsx# 只看某支行程開了哪些 handle,含非檔案類型
handle.exe -a -p explorer# 搜尋模式下加 -u 才會顯示擁有者(官方定義:when searching for handles)
handle.exe -a -u -p explorer report.xlsx# 統計系統上各類 handle 的數量,追 handle 洩漏時的第一張圖
handle.exe -sHandle 的搜尋比對同樣不分大小寫,而且片段可以出現在路徑的任何位置;-p 接受部分名稱,例如 -p exp 會涵蓋 Explorer。若要做成 CSV 給 Excel 或後續腳本吃,加上 -v(逗號分隔)或 -vt(Tab 分隔)。
找到元兇之後,九成情況的正解是回到那支程式把檔案關掉,而不是動手強拆。真的需要強拆時,請先跳到步驟六。
步驟四:先挑出異常的程序本身
在往 DLL 那一層鑽之前,先把「這支行程本身合不合理」判一輪。Process Explorer 的上窗格不是平的清單,而是依父子關係排列的行程樹,加上官方明載的「含各行程擁有者帳號」欄位,你可以只看四個訊號就篩掉九成雜訊:
- 父行程是誰:正常情況下,瀏覽器由桌面或工作列啟動、服務由服務主機啟動。若一支不起眼的執行檔底下掛著命令列直譯器,或某個文件編輯器生出了網路工具,那就是該點開來看的位置。
- 擁有者帳號:應該以
SYSTEM或服務帳號執行的系統元件,卻掛在你的一般使用者帳號底下(或反過來),是明顯的不對勁。 - 映像路徑與公司資訊:把映像路徑欄位打開,系統元件應該落在
C:\Windows\System32\。名字長得像系統行程、路徑卻在使用者資料夾底下,幾乎不用再查第二個訊號。 - 簽章與 VirusTotal 欄位:步驟二已經設定好,這時候直接看結果即可。
把可疑的行程圈出來之後再進下一步——因為真正的酬載往往不在這支 exe 身上,而在它載入的 DLL 裡。
步驟五:揪出塞在正常行程裡的可疑 DLL
把下窗格切到 DLL 檢視,選中要檢查的行程,你會看到它載入的所有 DLL 與記憶體對應檔案。判讀時建議照這個順序看三個欄位:
| 訊號 | 正常的樣子 | 該起疑的樣子 |
|---|---|---|
| 路徑 | C:\Windows\System32\ 或程式自己的安裝目錄 | %TEMP%、%APPDATA%、使用者下載資料夾、公開可寫的目錄 |
| 簽章 | 有效簽章,簽署者與該軟體廠商一致 | 未簽章,或簽署者與宿主程式毫無關係 |
| VirusTotal | 0 / 70 上下 | 多家引擎同時命中 |
三個欄位裡,路徑通常比簽章更早露出馬腳:系統元件被放在使用者可寫的目錄下,本身就是不該發生的事。
要反過來問「全系統有哪些行程載入了這個 DLL」,一樣用 Ctrl+F 的 Find Handle or DLL,輸入 DLL 檔名即可——官方對這個搜尋能力的描述就是「快速找出哪些行程開啟了特定 handle 或載入了特定 DLL」。
命令列的 ListDLLs 則更適合做全機掃描:
# 列出全系統所有未簽章的 DLL,快速縮小可疑範圍
listdlls.exe -u# 反查哪些行程載入了指定的 DLL
listdlls.exe -d suspicious.dll# 顯示某支行程所載入 DLL 的版本資訊
listdlls.exe -v outlook-u 這個開關特別值得記起來:官方在工具簡介中明載 ListDLLs「可用來掃描行程中未簽署的 DLL」,對應的參數說明就是 -u(Only list unsigned DLLs)。另外 -r 會標出因為無法載入到偏好基底位址而被重新配置的 DLL,追 DLL 版本衝突時很有用。
⚠️ 未簽章不等於惡意。大量開源工具、自行編譯的程式、老舊的第三方元件都沒有簽章。-u 給你的是候選名單,不是判決書。
步驟六:交叉驗證與處置(⭐⭐⭐ 高風險)
⚠️ 執行本節前請先備份重要資料,並確認電腦接著電源。 關閉 handle 與結束行程都可能造成資料遺失或系統不穩定。
停止條件清單(符合任一項,請停手改用其他方法):不確定該行程的用途;未完成備份;已啟用 BitLocker 但手邊沒有復原金鑰;公司或學校管控的設備而未取得 IT 授權;工具輸出與本文描述不符。
判定一支行程或一個 DLL 是否有問題,不要只看單一訊號。請至少讓三個訊號同時指向同一個方向:載入路徑異常、簽章缺失或不相符、VirusTotal 多家引擎命中。只有一家引擎報毒並不足以判定為惡意——VirusTotal 官方文件本身就說明,這個服務同時也用於辨識誤判(正常無害的檔案被一家或多家掃描器判為惡意),並設有專門的誤判說明頁。
處置的優先順序,由輕到重:
- 先暫停,不要先殺。Process Explorer 可以對行程執行 Suspend,凍結它但保留現場,方便你繼續蒐證。直接結束行程會讓證據消失,而且若對方有守護行程,殺掉還會被立刻拉起來。
- 能從來源解決就從來源解決。檔案鎖不掉,就把持有它的應用程式正常關閉;可疑 DLL 來自某個軟體,就把那個軟體移除。
- 強制關閉 handle 是最後手段。Process Explorer 可以在下窗格對選中的 handle 直接關閉,命令列則是
handle.exe -c <handle 值> -p <PID>,官方註明 handle 值以十六進位解讀、且必須用 PID 指定行程。官方在這個開關旁邊放了明確警告:關閉 handle 可能造成應用程式或系統不穩定——因為你是在該行程完全不知情的狀況下,把它手上的物件抽走,它下一次存取就會拿到無效 handle。 - 確認是惡意程式時,交給防毒軟體處理,不要自己手動刪檔。手動刪除常常只清掉落地檔案,留下開機自動執行項目與服務註冊。開機項目的清查請用 Autoruns 檢視隱藏的開機項目。
🔒 VirusTotal 的隱私紅線(請認真看完):預設的雜湊查詢不會外傳檔案內容,但「提交檔案掃描」是另一回事。VirusTotal 官方文件寫得很清楚:掃描報告會分享給 VirusTotal 公開社群,而提交的檔案或頁面內容也可能分享給 VirusTotal 的付費客戶,供資安研究使用。換句話說,任何含有公司機密、個資、內部文件或授權金鑰的檔案,一律不要提交。VirusTotal 甚至專門有一頁 FAQ 在回答「我不小心上傳了含機密資訊的檔案,可以幫我刪掉嗎」——你不會想成為那一頁的讀者。
🔬 底層機制:這個問題到底在系統哪一層?
要真正理解 Process Explorer 為什麼看得到工作管理員看不到的東西,得往下走一層,看 Windows 的物件管理員(Object Manager)。
Windows 核心裡幾乎一切都是「物件」:檔案、登錄檔機碼、事件、互斥鎖、執行緒、行程,全都是核心物件。使用者模式的程式不能直接碰核心物件,它拿到的是一個 handle——本質上是該行程私有的 handle table 裡的一個索引。每個行程都有自己的 handle table,索引值只在自己家裡有意義。
於是「檔案被鎖住」這件事的真相就浮現了:鎖不是檔案的屬性,而是「某個行程持有指向該 File 物件的 handle,而且它開啟時宣告的共用存取模式不允許刪除或寫入」。檔案總管跳出的那個對話框,背後通常就是共用存取模式衝突(ERROR_SHARING_VIOLATION);它拿到的是一個錯誤碼,沒有「誰持有」的資訊,所以它才講不出兇手是誰。
Process Explorer 內建說明檔對這個搜尋的定義是「對全系統已開啟的 handle 與已載入的 DLL 做不分大小寫的子字串比對」;原理上等同於反向走過全系統各行程的 handle table,把每個 handle 解析回物件名稱後再比對你輸入的字串(內部實作細節官方未公開)。這需要跨行程查詢核心物件的能力,也就是為什麼「要看到其他帳號、其他完整性層級行程的 handle」必須提權——這同時解釋了為什麼命令列的 Handle 官方直接註明必須具備系統管理員權限。
DLL 那一側是另一條路徑。DLL 不是「被執行的檔案」,而是被載入器(loader)對應(map)進行程虛擬位址空間的一段 section。載入完成後,那段程式碼就活在宿主行程裡,共用宿主的 PID、宿主的權限、宿主的網路連線。從外面看,你只看得到一支簽章正常的 .exe。這正是 DLL 注入之所以有效的原因,也正是為什麼「看行程清單」永遠抓不到它,而「看每支行程載入了哪些 DLL」才抓得到。
順著這條路往下,還有一個常被忽略的角落:攻擊者也可能把負載藏在 NTFS 的替代資料流裡,那又是另一層藏身處。
🔙 萬一翻車:回退步驟
情境一:關閉 handle 後,應用程式行為異常
先儲存其他還開著的工作,然後完全關閉並重新啟動那支應用程式。handle 被強制關閉後無法「還原」,重啟行程會讓它重新開啟所需物件。若該程式有暫存檔或工作階段檔,重啟時通常會提示復原。
情境二:結束行程後系統出現錯誤或畫面異常
若誤停的是 explorer.exe,不需要重開機:在 Process Explorer 按 File → Run,輸入 explorer.exe 執行即可讓桌面與工作列回來(此路徑同樣適用於檔案總管本身當掉的情況,詳見 Explorer.exe 當機完整排查方法)。若誤停的是系統服務行程,請開啟「服務」管理主控台把對應服務重新啟動;無法啟動時直接重新開機,絕大多數服務會恢復。
情境三:系統無法正常開機
先嘗試安全模式:重新開機時從復原環境進入 疑難排解 → 進階選項 → 啟動設定 → 重新啟動,選擇安全模式。若安全模式下一切正常,代表問題出在一般模式才載入的元件。仍然無法開機時,使用 系統還原 回到操作前的還原點;這也是為什麼本文在步驟五開頭要你先備份。相關工具與救援環境的官方說明,見 Windows 復原選項。
💡 總結:進階玩法與底層邏輯
站長我想強調的一點是:Process Explorer 不是「更好的工作管理員」,它是不同用途的工具。工作管理員回答「現在誰在吃資源」,Process Explorer 回答「這支行程從哪來、誰在跑、握著什麼、載入了什麼」。把它當成前者的替代品,你會覺得它只是欄位比較多;把它當成後者,它才是那把別人沒有的鑰匙。
三個值得養成的習慣:
第一,先看下窗格,再看上窗格。 大多數人開起來就盯著上面的行程樹,但真正的資訊密度在下面的 handle 與 DLL 清單裡。
第二,Suspend 優先於 Kill。 蒐證階段凍結行程,比殺掉它保留更多線索,也避免守護行程立刻把它拉回來。
第三,把 Sysinternals 當成一組工具而不是一支工具。 圖形介面適合互動追查,命令列的 Handle 與 ListDLLs 適合批次與腳本;listdlls -u 一行就能掃出全系統未簽章的 DLL,這件事在圖形介面裡逐支行程點是做不完的。要長時間錄製行為請用 ProcMon,要看資源使用趨勢則交給效能監視器。
最後補一句版本資訊:本文依據的是官方 v17.13(2026-08-12 發布)。Sysinternals 的更新節奏並不慢——光是 2026-08-12 那一天,官方就同步更新了 NotMyFault、RDCMan、ZoomIt、CoreInfo、Process Explorer、Process Monitor 與 PsPing 七支工具。若你手邊那份是好幾年前解壓縮的舊 ZIP,建議直接重下一份。
⚠️ 本文的版本號(v17.13)、發布日(2026-08-12)、檔案大小、系統支援清單、各命令列參數語意與官方風險警語,均逐項核對自 Microsoft Learn 的 Sysinternals 下載頁與 Sysinternals 官方部落格公告(查證日 2026-08-21);VirusTotal 的分享政策取自 VirusTotal 官方說明文件。本文不含站長第一手實機實測數據,亦不宣稱實測結果。
❓ 常見問題
Q:Process Explorer 還支援 Windows 10 嗎?
官方頁面(2026-08-12 更新)目前標示的支援範圍是「用戶端:Windows 11 以上;伺服器:Windows Server 2016 以上」,不包含 Windows 10。在 Windows 10 上通常仍能執行,但那屬於官方支援清單之外的情況,遇到問題不會有官方保證。要在 Windows 10 上做同樣的事,命令列的 Handle 與 ListDLLs 是相對保險的替代路線。
Q:VirusTotal 顯示 1 / 70 命中,是中毒了嗎?
單一引擎命中不足以判定為惡意。VirusTotal 官方文件明白說明,這個服務同時也用於辨識誤判——正常無害的檔案被一家或多家掃描器判為惡意。請改看三件事:命中的是哪幾家引擎、檔案的載入路徑是否合理、簽章是否有效且簽署者相符。VirusTotal 官方也提供誤判申訴的說明頁面。
Q:一定要用系統管理員權限開啟嗎?
Process Explorer 本身不需要提權就能執行,但要做完整的跨帳號檢視與全系統 handle 搜尋,就需要。命令列的 Handle 則是官方直接寫明必須具備系統管理員權限。一般權限下你仍然看得到自己帳號底下的行程,但結果會不完整,很容易誤以為「查無此行程」。
Q:關閉 handle 之後,那個檔案就能刪了嗎?
通常可以,但這是有代價的做法。官方在 Handle 的 -c 參數旁明確警告:關閉 handle 可能造成應用程式或系統不穩定。原因是持有者完全不知道 handle 被抽走,下次存取就會失敗。正常關閉持有該檔案的程式,永遠是比較安全的第一選擇。
Q:Process Explorer 和 ProcMon、資源監視器該怎麼分工?
用「時間軸」來記最清楚:Process Explorer 看的是此刻的狀態(誰握著什麼 handle、載入了哪些 DLL);ProcMon 錄的是一段時間內的每一筆事件(每次檔案與登錄檔存取);資源監視器看的是資源使用的趨勢。刪不掉檔案先開 Process Explorer,行為詭異但不知道發生什麼事就開 ProcMon 錄一段。
🔗 延伸閱讀
- 一個檔案裡還能藏檔案?NTFS Alternate Data Streams 原理與檢查方法
- Windows 內建防毒夠用了嗎?Microsoft Defender 完全解析與安全強化設定教學
- Windows 效能監視器 PerfMon 教學:長時間記錄 CPU、磁碟與記憶體異常
- 電腦卡卡慢?Windows 工作管理員終極指南:揪出資源怪獸
📎 參考資料來源
📖 第一級|廠商官方:
- Process Explorer v17.13 — Microsoft Learn / Sysinternals — 2026-08-21 查證
- NotMyFault, RDCMan, ZoomIt, CoreInfo, Process Explorer, Process Monitor, and PsPing — Sysinternals Blog — 2026-08-21 查證
- Process Explorer v17.0, Handle v5.0, Process Monitor v3.92, and Sysmon v14.11 — Sysinternals Blog — 2026-08-21 查證
- Handle v5.0 — Microsoft Learn / Sysinternals — 2026-08-21 查證
- ListDLLs v3.2 — Microsoft Learn / Sysinternals — 2026-08-21 查證
- Updates: Process Explorer v16.0, PsPing v2.01(VirusTotal 整合導入公告)— Microsoft Learn 封存部落格 — 2026-08-21 查證
- How it works — VirusTotal 官方文件 — 2026-08-21 查證
- I am experiencing a false positive — VirusTotal 官方文件 — 2026-08-21 查證
📖 第二級|工具內建文件:
- Process Explorer 內建說明檔(procexp.chm,隨 v17.13 ZIP 發布):Searching、View、Options 各章之選單路徑與快捷鍵 — 2026-08-21 查證
⚠️ 本文核心事實以第一級為準,選單路徑與快捷鍵以工具內建說明檔為準。
📅 本文查證戳記:2026-08-21 依據 Process Explorer v17.13 官方文件撰寫。
若你在後續版本遇到步驟失效,歡迎在留言區回報,站長會更新文章。
