0

メモ帳とtaskmgrが開いているという2つのプロセスがあります。これらの2つまたはいくつかのプロセスを強制終了したいのですが、どうすればこれを実行できますか?これまでのところ、私はグーグルでこれを思いついた:

Process.GetProcesses().Where(p => p.ProcessName == "notepad,taskmgr").ToList().ForEach(y => y.Kill());

上記の2つのプロセスを区別する方法がわかりませんか?

4

6 に答える 6

5

そのlinqクエリは、名前が「notepad、taskmgr」の場合にのみプロセスを検索しているように見えます。両方を取得するには、次のようなクエリを使用します。

Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr").ToList().ForEach(y => y.Kill());

さらにプロセスを追加する場合は、次のようなことを行うことをお勧めします。

var processNamesToKill = new List<string> { "notepad", "taskmgr", "someotherprocess" };
Process.GetProcesses().Where(p => processNamesToKill.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());

その後、そのリストに他のプロセスを追加できます。見つけたものを見つけることに関しては、ForEachで、必要に応じて、によって名前にアクセスy.ProcessNameし、条件付きで使用することができます。

.exe編集:必要に応じて、これらのプロセス名に追加します。

于 2012-09-25T20:45:08.367 に答える
3

強制終了するプロセスを含むリストまたは配列を作成し、リストでプロセスの名前を確認します

List<string> killme = new List<string> { "notepad", "taskmgr" }

Process.GetProcesses().Where(p => killme.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());

削除された回答に含まれていた1つのライナー:

Process.GetProcesses().Where(p => new[] {"notepad", "taskmgr"}.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
于 2012-09-25T20:44:24.110 に答える
2

あなたはこれをやろうとしていますか?

Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr")
    .ToList().ForEach(y => y.Kill());

もし私があなただったら、私がすることは、一度に1つの名前だけをすることです。コードを読んでいる人にとっては、はるかに理解しやすいです。

class Program
{
    static void Main(string[] args)
    {
        killProcess("notepad.exe");
        killProcess("taskmgr");
    }

    public static void killProcess(string name)
    {
        foreach (Process process in Process.GetProcessesByName(name))
        {
            process.Kill();
        }
    }
}
于 2012-09-25T20:44:37.357 に答える
0
        var processesToKill = new [] {"notepad", "iexplorer"};
        var processes = Process.GetProcesses().Where(p => processesToKill.Contains(p.ProcessName)).ToList();
        processes.ForEach(p => p.Kill());
于 2012-09-25T20:45:33.703 に答える
0

強制終了するプロセスのリストがある場合は、を使用できます。これは機能Containsp => p.ProcessName == "notepad,taskmgr"ません(「notepad、taskmgr」という名前のプロセスはありません。コンマを追加しても特別な意味はありません)。

代わりに次のようなものを試してください

var processesToKill = new Collection<string> { "notepad", "taskmgr" };

foreach (var process in Process.GetProcesses().Where(p => processesToKill.Contains(p)))
{
    process.Kill();
}
于 2012-09-25T20:45:45.193 に答える
0

残りのlinqが機能する場合、その場所は次のようになります。

... Where( p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr" ) ...

それ以外の場合は、次のように、強制終了するプロセス名のセットを作成することをお勧めします。

var set = new HashSet<string>() { "notepad.exe", "taskmgr.txt", "someotherthing.exe" };
... linq .. Where( p=> set.Contains( p.ProcessName ) )...

またはセットに対する他のさまざまな結合操作。

于 2012-09-25T20:45:32.663 に答える