1 為何要「按程序分流」而不是只換全域節點
以網域為主的規則(例如 DOMAIN-SUFFIX、GEOSITE)很適合處理「去哪個網站」的問題,但同一台電腦上常同時開著遊戲、通訊軟體、瀏覽器與雲端辦公程式。若您只把 Clash 切到某一個節點,等於所有程式共用同一出口:遊戲可能吃到不適合 UDP 或路由較遠的線路,而文書工作又可能被您為遊戲挑的低延遲節點影響連線品質。相較之下,程序分流關心的是「哪一個執行檔發起的連線」,在支援的環境下可由核心依 PROCESS-NAME 把流量導向不同策略組,這正是「按應用代理」在 Clash 生態裡的典型實作方式之一。
本文聚焦 Windows 桌面情境,並假設您使用內建 Mihomo(Clash Meta)核心的現代用戶端;規則語法與舊版 Clash 純 Premium 功能集可能略有差異,若載入設定時出現未知規則類型,請先確認核心版本與文件。與僅介紹 url-test/fallback 策略組或 HTTPS 嗅探與 SNI的文章相比,本篇補上「依執行檔名決定出口」這條軸線,方便與網域規則並存。
2 前置:核心、TUN,以及為何要能辨識程序
PROCESS-NAME 要能穩定生效,前提是核心在轉送連線時拿得到發起該連線的程序資訊。在 Windows 上,僅開系統代理時,部分流量仍可能不經由您預期的路徑,或較難與特定程序精準對應;實務上多數使用者會搭配TUN 模式(虛擬網卡接管)讓本機程式流量較一致地經過核心處理。建議先依TUN 模式教學完成驅動與堆疊相關設定,再回來加程序規則,較能避免「規則寫了卻像沒生效」的挫折感。
用戶端方面,請使用內建或可切換到 Mihomo 的圖形介面,並以規則模式(Rule)運作,讓 rules 區段真的參與決策。若您習慣從訂閱自動產生完整設定,仍可把下列片段透過 mixin 或覆寫合併進去,以免日後更新訂閱時覆蓋掉手動追加的程序規則。
proxy-groups(或使用 url-test 自動挑延遲)。PROCESS-NAME 只負責把程式對應到哪一組,本身不取代節點池的維護。
3 先拆兩組策略組:遊戲與辦公(或瀏覽器)
在撰寫任何 PROCESS-NAME 之前,請在 proxy-groups 裡準備好要被指向的名稱。以下用簡化範例示範兩個 select 群組:GAME 放您想給遊戲用的節點(或再包一層 url-test),OFFICE 放瀏覽器、文書、視訊會議等用途。實際節點名稱請完全依您訂閱展開後的字串填寫,避免因 emoji 或前綴變更而對不準。
# Example — replace proxy names with your subscription labels
proxy-groups:
- name: GAME
type: select
proxies:
- 節點-遊戲-A
- 節點-遊戲-B
- DIRECT
- name: OFFICE
type: select
proxies:
- 節點-OFFICE-A
- 節點-OFFICE-B
- DIRECT
上例中 DIRECT 代表必要時允許直連;是否保留請依您的隱私與法遵需求決定。若遊戲對延遲極度敏感,也可將 GAME 改為 url-test 自動選低延遲,細節可再對照策略組測速一文中的參數說明。
4 PROCESS-NAME 規則寫法與順序
在 rules 區段中,PROCESS-NAME 的典型格式為:PROCESS-NAME,<程序名稱或模式>,<策略組或 DIRECT>。在 Windows 上,常見做法是填執行檔名稱(例如 chrome.exe、msedge.exe),實際可用名稱請以您環境為準。規則採由上而下比對,先命中者先贏,因此請把較具體、您最在意的程序規則放在前面,避免被較寬鬆的 DOMAIN 或 MATCH 提前帶走。
rules:
# Game client — replace with your real .exe name from Task Manager
- PROCESS-NAME,GameClient.exe,GAME
# Browsers / office (examples)
- PROCESS-NAME,chrome.exe,OFFICE
- PROCESS-NAME,msedge.exe,OFFICE
- PROCESS-NAME,OUTLOOK.EXE,OFFICE
# ... your DOMAIN / GEOIP rules ...
- MATCH,OFFICE
最後一行 MATCH,OFFICE 僅為示例:代表其餘未命中者預設走辦公組。實務上您可能改為 MATCH,GAME 或指向自動選線的群組,請依日常使用比例調整。切勿在未理解預設後果的情況下把 MATCH 設成與預期相反的群組,否則會以為「程序規則無效」,其實是尾端規則覆蓋了體感。
記住:PROCESS-NAME 解決的是「哪個程式」;同一程式若連到不同網域,仍共用您為該程序指定的策略組。若還要細到「同一瀏覽器分工作/娛樂」,需改依網域拆規則或使用多設定檔等進階做法。
5 如何查 Windows 上的程序名稱
工作管理員在「詳細資料」分頁會列出名稱欄位,通常即為執行檔名(含 .exe)。線上遊戲常見情況是啟動器與實際遊戲主程式為不同程序:若只為啟動器寫規則,進入對戰後實際連線的可能是另一個 .exe,此時就要分別加入多條 PROCESS-NAME。部分平台會更新或隨機化檔名,若規則頻繁失效,需重新確認目前程序列表。
若您使用 Microsoft Store 或UWP 應用程式,程序名稱與傳統 Win32 程式不同,有時還會遇到回環與系統代理相容性問題,可一併參考UWP 與 Loopback 修復一文,與本文的程序規則相輔相成而非互相取代。
大小寫與拼字
建議在 YAML 中與工作管理員顯示完全一致地填寫;若核心版本對大小寫不敏感,仍維持一致可減少人為錯誤。複製設定時留意全形逗號或隱藏字元,YAML 解析失敗時用戶端通常會提示行號,請逐行檢查。
6 實例思路:與網域規則並存、訂閱更新不丟規則
許多使用者的 rules 前半段已是社群規則集(依網域分流),後半段才輪到自訂。若您希望特定程序覆寫網域結果,必須把 PROCESS-NAME 放在會「搶先命中」的位置——通常是在一般 DOMAIN 規則之前,或至少在您希望覆寫的那段規則之前。反之,若某程式流量希望完全交給既有網域規則決定,就不要為該程序再加 PROCESS-NAME,以免與預期牴觸。
訂閱常會整包覆寫 rules,因此把個人化的程序清單放在 mixin 的 prepend-rules 或專案文件建議的覆寫欄位,是長期維護較省心的做法;細節已收錄於訂閱覆寫教學,可與本篇連貫閱讀。
7 限制、反作弊與除錯思路
並非所有連線在任何堆疊下都能完美對應到單一「使用者層」程序:系統元件、驅動或反作弊模組可能以不同方式發起連線,導致規則不如預期。若遊戲內建專用加速器或強制綁定網路堆疊,也可能繞過您預期的分流路徑。遇到此類情況,應先還原為最小可重現設定(僅 TUN、僅幾條規則),再逐步加回。
除錯時建議依序檢查:(1)策略組名稱與規則中引用是否一致;(2)程序名稱是否為實際連線的那一個執行檔;(3)規則順序是否被更前面的規則攔截;(4)TUN/系統代理是否確實讓流量經過核心。多數用戶端提供連線日誌或規則命中紀錄,可對照連線當下選到的策略與規則行號。若長時間無法穩定辨識程序,請查閱所使用核心版本對 Windows 的說明,必要時在社群或文件確認是否有額外開關。
8 總結
在 Windows 上若已熟悉系統代理或 TUN,下一步想做到「遊戲走遊戲節點、辦公與瀏覽器走另一組」,最直覺的做法之一就是在 Mihomo 設定裡加入 PROCESS-NAME 規則,把執行檔對應到不同的策略組,並透過規則順序與 mixin 覆寫在訂閱更新後仍保留個人化清單。它與網域分流、url-test 自動選線、以及 Sniffer 補強網域辨識等主題彼此補位,組起來才是完整的「按情境分流」工具箱。
若您尚未安裝圖形用戶端或希望取得與站內教學一致的套件來源,建議從本站下載頁取得安裝包,再依序完成 TUN、策略組與本文的程序規則。相比在介面裡來回切換全域節點,先把程序與策略組的對應關係寫清楚,長期使用會更穩定、也較容易與朋友或同事分享同一套「結構化」設定。