首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 進程管理與強制結束:Process.GetProcesses 實戰

     編輯:關於C#

前言

System.Diagnostics.Process 提供完整的進程枚舉、資訊查詢、啟動與終止功能。本文示範如何列舉所有進程、讀取模組資訊、依完整路徑精準結束目標進程。

核心 API

  • Process.GetProcesses():取得所有進程陣列 (含系統隱藏進程)。
  • ProcessName:不含副檔名的檔名 (如 notepad)。
  • Modules:載入模組集合,[0] 為主執行檔完整路徑。
  • Kill():強制終止,**不彈出儲存對話框**,慎用。
  • StartInfo:僅用於啟動新進程,不適用查詢既有進程。

完整範例:列舉並依路徑結束

private void btnProcess_Click(object sender, EventArgs e)
{
    Process[] procs = Process.GetProcesses();
    richTextBox1.Clear();

    foreach (Process p in procs)
    {
        if (p.Id == 0) continue; // 系統閒置進程

        string info = $"進程名稱: {p.ProcessName}  ID: {p.Id}";
        try
        {
            if (p.Modules != null && p.Modules.Count > 0)
            {
                ProcessModule pm = p.Modules[0];
                info += $"\n 主模組: {pm.FileName}";
                info += $"\n 模組名: {pm.ModuleName}";
                info += $"\n 版本資訊:\n{pm.FileVersionInfo}";

                // 依完整路徑比對並結束
                if (pm.FileName.Equals(textBox1.Text.Trim(), StringComparison.OrdinalIgnoreCase))
                {
                    p.Kill();
                    info += "\n >> 已強制結束";
                }
            }
        }
        catch (System.ComponentModel.Win32Exception)
        {
            info += "\n (無權限讀取模組資訊)";
        }
        finally
        {
            richTextBox1.AppendText(info + "\n==========================\n");
        }
    }
}

輸出範例

進程名稱: SearchNet  ID: 3092
主模組: C:\Program Files\SearchNet\SearchNet.exe
版本資訊:
File: C:\Program Files\SearchNet\SearchNet.exe
InternalName: SearchNet
FileVersion: 1, 0, 2, 4
FileDescription: IE地址欄搜索程式
...
==========================
進程名稱: svchost  ID: 1700
主模組: C:\WINDOWS\system32\svchost.exe
版本資訊: ...
==========================

注意事項

  • 權限:讀取系統進程模組需管理員權限,建議應用程式清單加入 requireAdministrator。
  • 誤殺風險:Kill() 不給進程釋放資源機會,可能導致資料損毀。優先嘗試 CloseMainWindow() (僅適用有視窗進程)。
  • Process.GetProcessesByName("name") 可依名稱快速過濾。
  • 64 位元進程下讀取 32 位元進程模組需啟用 Prefer 32-bit 或編譯為 64 位元。

小結

掌握 Process 類別的枚舉、模組存取、終止方法,可建立進程監控、防毒輔助、自動化測試等工具。務必處理權限例外與誤殺風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved