為什麼要在 Windows 上「依程式」分流?
許多使用者的實際需求並不是整台電腦都走代理,而是:只讓某款線上遊戲、跨區啟動器、BitTorrent 用戶端或特定生產力軟體經由節點出口,其餘辦公軟體、影音串流、內網與下載大檔的場景盡量直連。在一般「規則模式」下,我們常用 DOMAIN-SUFFIX、GEOIP 等條件依網路位址分類,但若同一套軟體的連線目標很雜、或你只想在處理程序(程式)層面切開,Clash 家族中的 Clash Meta/mihomo 便提供 PROCESS-NAME 這類以執行檔名稱為條件的分流方式,正是搜尋「Clash 按行程/程式分流」「PROCESS-NAME 怎麼寫」時會接觸到的那條路。
這種寫法與「讓全機流量都進 Clash 再慢慢用規則切」的泛 TUN 教學相比,敘事重心不同:本文假設你主動、精準地把少數幾支程式的路徑指到專屬策略組,而不是先談盤古開天式的全流量接管。也與本站另一篇以瀏覽器為主、關閉系統代理、只讓 Chrome/Edge 連到本機埠的作法 分場景補位:瀏覽器專用篇解決的是 HTTP 堆疊;本篇則涵蓋一般 Win32 程式、遊戲與下載器在 Meta 內的程式名稱匹配。
先決條件:核心必須是 Meta,且流量要能帶出「誰在連線」
PROCESS-NAME 屬於 mihomo(Clash Meta 核心)延伸規則,傳統 Clash Premium 行為不盡相同;請確認用戶端內顯示的核心為 Meta / mihomo,且訂閱與自訂片段未把規則覆寫成舊版不相容語法。其次,在 Windows 上要讓核心取得「這條連線隸屬哪個 .exe」,多數實務情境需要讓系統層或驅動層先把流量導入核心,因此常見搭檔是開啟 TUN 模式(或客戶端中與 TUN 等效的系統層接管),讓程式的實際連線在進入 mihomo 時仍附帶處理程序資訊。僅有少數從本機 127.0.0.1 主動連到 mixed-port 的應用,才可能在不走 TUN 的情況下也看得到名稱,但遊戲、大多數下載器通常不會這樣走;若你寫了 PROCESS-NAME 卻始終不命中,第一步請對照 TUN 模式指南 完成介面、驅動與 DNS 的整體設定,再回頭調規則。
若你尚未在 Windows 上跑通基礎環境,可先依 Clash for Windows 教學 補齊安裝、訂閱匯入與模式切換,再實作本文;規則語意、策略組的通用觀念則能與 規則分流詳解 相互印證。
步驟一:在 Windows 上查出正確的執行檔名稱
PROCESS-NAME 匹配的是可執行檔的檔名(常見寫成 notepad.exe 這種形態),不是視窗標題、也不是安裝資料夾的完整路徑。實務上最穩的方式,是在工作管理員的「詳細資料」分頁檢視欄位「名稱」;若沒有看到副檔名,可在欄位標題上按右鍵、選取更多欄位,勾選「處理程序名稱」或顯示完整命令列。若同一款遊戲同時有啟動器、反作弊、更新子行程,實際對外連線的可能是 game.exe 與 launcher.exe 等不同執行檔,要從產生流量的那條下手。
在 Microsoft Store 或 UWP 封裝的程式,有時會在背景由多個相關處理程序共同出現,名稱未必直覺;建議一邊產生流量(下載、登入、匹配伺服器)一邊在管理員中重新整理,觀察哪幾支 .exe 的網路活動與你預期一致。若你掌握完整安裝路徑、且不同資料夾底下有同名的兩支程式,可再研究 Meta 內的 PROCESS-PATH 類型(以路徑精確鎖定),作為 PROCESS-NAME 的進階替換;一般情境仍以檔名為主即可。
步驟二:在 rules 寫入 PROCESS-NAME
語法大綱為一列一規則、由上而下匹配,第一條命中的就生效。典型寫法如下(請把括號內文字換成你實際的策略組名稱):
# Example: per-app routing on Clash Meta (mihomo)
# Put PROCESS-NAME lines BEFORE broad DOMAIN / GEOIP rules
rules:
- PROCESS-NAME,SomeGame.exe,🎮遊戲專用
- PROCESS-NAME,qbittorrent.exe,🔻下載
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,🌏預設
其中 SomeGame.exe 必須與工作管理員中看到的名稱一致。Windows 上檔名大小寫通常不影響匹配,但為了維護時不必猜測,建議直接從系統畫面抄寫。策略組 🎮遊戲專用 應在 proxy-groups 內定義成 select 或 url-test 等,並放入你實際要使用的節點;若你希望該程式明確直連,可將最後的動作寫成 DIRECT 而不是策略組名稱,視你的設計而定。
規則順序是新手最常踩的雷:PROCESS-NAME 必須放在「已經會吃掉流量」的寬泛規則之前。例如一條很寬的 DOMAIN-KEYWORD 或臨近結尾的 GEOIP,CN,DIRECT 若先被命中,就不會再輪到你在後方補的程式規則。實作時請一邊參考 規則順序的通用原則,一邊用客戶端內的連線日誌或偵錯畫面確認實際命中的規則名稱。
步驟三:對齊 TUN、系統代理與 DNS,避免假陰性
當 TUN 剛啟用時,部分程式仍可能短暫使用舊的 DNS 快取或略過變化;若你看得到連線、但 PROCESS-NAME 始終是空的或規則顯示落到底層的 MATCH,可檢查:客戶端是否同時寫入系統代理導致雙路徑、dns 是否與 fake-ip 模式衝突、或防火牆是否讓遊戲改走非預期介面。此類「看得到流量卻配錯行為」的查法,能與 TUN 專文 中的診斷章節一起搭配;核心精神是讓同一路連線在核心內呈現的處理程序欄位不為空,你的 PROCESS-NAME 行才有意義。
常見場景與寫法範例
線上遊戲、外服啟動器
以「遊戲執行檔+專用策略組」為例:在策略組內以 select 固定一個你信任的低延遲節點,避免 url-test 在戰局中途切節點。若遊戲下載大更新時希望改走大頻寬但不同地區節點,而正式對戰仍固定另一出口,有時會拆成兩個 PROCESS-NAME 指向不同子行程;若實作困難,可退回依下載用 CDN 網域的 DOMAIN-SUFFIX 規則,與程式規則混用。與 遊戲 UDP/TUN 排錯專文 同讀,較能一次處理掉閃退與斷線。
下載管理器、P2P 用戶端
下載器往往同時建大量連線,且目標是 IP 比較多、網域變化大;以 PROCESS-NAME 讓整支程式只走一個「高頻寬節點」策略組,可以減少在規則表裡窮舉下載站網域的維護量。但請留意合法版權與本國法規,本文僅從技術上說明匹配方式。若下載路徑其實由系統內建服務觸發(非使用者目錄下的 .exe),要改抓該服務的處理程序名,否則會以為規則壞掉。
不生效時的檢查清單
(一)名稱打錯或打到啟動器而非實際連線主體;(二)規則寫在太下面,被 GEOIP 或寬 DOMAIN 先吃掉;(三)未啟用 TUN(或等效層)導致核心拿不到處理程序欄;(四)該軟體以系統或驅動身分連線、名稱不是你想的那支 exe;(五)客戶端實際載入的設定檔不是你在編輯的那一份(多檔、訂閱合併、覆寫層衝突)。建議在修改後重啟 Clash 核心、必要時關掉再開遊戲,並在連線面板上觀察規則命中列。
和「只讓瀏覽器走本機 Clash 埠、完全不開系統代理」的選項相比,PROCESS-NAME 路線通常假設你願意讓 mihomo 在較底層參與轉送,兩者適用的人員與合規場景不盡相同;辦公室筆電若不能動 TUN,可優先參考瀏覽器單走代理的作法,而不要用半套方式硬寫程式規則。
總結
在 Windows 上,以 Clash Meta 的 PROCESS-NAME 做應用級代理,本質是:在規則表前面精準寫上「哪一支 .exe 走哪個策略組」,並在TUN 與 DNS、規則順序上把事情對齊,讓核心真的看得到程式的名稱,而不是只依靠網域名稱。相較於全機長開「全部走代理再靠規則回直連」,相對聚焦的使用者能明確寫出少數幾條;相較於只談 TUN 與 GEOIP 的泛用教學,本方法又和依目標位址分類的路徑有清楚切口。實作時記得在任務管理員核對可執行檔、保留連線偵錯畫面,邊改邊看命中列,通常能在幾輪內穩定落地。
若你尚未安裝圖形化用戶端,從本站的 下載頁面 取得與 mihomo 核心相容的 Windows 用版本,能較一貫地完成訂閱、TUN 權限與規則編輯;相較於只靠自己拼指令列、逐版追上游 Release,圖形介面在關閉**系統代理**與**僅有規則/TUN 差異**的展示上通常更直觀,長期更新也比較省力。