首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 安全關閉進程:判斷進程是否存在再 Kill

     編輯:程式設計疑難解答

錯誤代碼

string processName = "explorer";
Process[] procs = Process.GetProcessesByName(processName);
procs[0].Kill();  // 若 procs.Length == 0 直接拋 IndexOutOfRangeException

正確寫法

string processName = "explorer";
Process[] procs = Process.GetProcessesByName(processName);
if (procs.Length > 0) {
    foreach (var p in procs) {
        try { p.Kill(); } catch (Exception ex) { /* 記錄日誌 */ }
    }
} else {
    Console.WriteLine($"進程 {processName} 未運行");
}

進階封裝:通用輔助方法

public static bool TryKillProcess(string name, int timeoutMs = 2000) {
    var procs = Process.GetProcessesByName(name);
    if (procs.Length == 0) return true; // 已不存在視為成功
    foreach (var p in procs) {
        p.Kill();
        if (!p.WaitForExit(timeoutMs)) {
            // 強制結束失敗,記錄錯誤
            return false;
        }
    }
    return true;
}

注意事項

  • 關鍵系統進程(explorer、csrss 等)Kill 後會自動重啟,但可能導致桌面閃爍、托盤圖標丟失,謹慎使用。
  • 需管理員權限才能 Kill 系統級進程,請在 manifest 加入 <requestedExecutionLevel level="requireAdministrator" />。
  • 生產環境優先考慮 Process.CloseMainWindow() 優雅關閉 GUI 程式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved