149

C# .NET または C++ で .exe ファイル名を検索してアクティブなプロセスを強制終了するにはどうすればよいですか?

4

8 に答える 8

280

素早い回答:

foreach (var process in Process.GetProcessesByName("whatever"))
{
    process.Kill();
}

(プロセス名から.exeを省略します)

于 2010-07-27T15:48:34.463 に答える
51

私の解決策は、Process.GetProcess()すべてのプロセスをリストするために使用することです。

それらをフィルタリングして必要なプロセスを含めることにより、Process.Kill()メソッドを実行してそれらを停止できます。

var chromeDriverProcesses = Process.GetProcesses().
    Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'
    
foreach (var process in chromeDriverProcesses)
{
     process.Kill();
}

アップデート:

( を使用して)非同期で同じことをしたい場合は、C# 8 Async Enumerablesこれをチェックしてください:

const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
             .Where(pr => pr.ProcessName == processName)
             .ToAsyncEnumerable()
             .ForEachAsync(p => p.Kill());

:asyncメソッドを使用しても、常にコードが高速に実行されるとは限りません。
主な利点は、操作中にフォアグラウンド スレッドが解放されることです。

于 2013-12-27T12:47:32.540 に答える
18

を使用Process.GetProcesses()して、現在実行中のプロセスを取得してProcess.Kill()から、プロセスを強制終了できます。

于 2010-07-27T15:45:58.867 に答える
-1
public void EndTask(string taskname)
{
      string processName = taskname.Replace(".exe", "");

      foreach (Process process in Process.GetProcessesByName(processName))
      {
          process.Kill();
      }
}

//EndTask("notepad");

概要: 名前に .exe が含まれていても、プロセスは終了します。「プロセス名から .exe を除外する」必要はありません。100% 動作します。

于 2017-06-09T20:59:44.610 に答える