1

私のツールでは、特定の時点でプロセスを名前で強制終了したいと考えています。現在、Win7 64 ビットでテストしていますが、受け取るエラーは次のとおりです。

32 ビット プロセスは 64 ビット プロセスのモジュールにアクセスできません

コード:

Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
    // now check the modules of the process
    foreach (ProcessModule module in process.Modules)
    {
        if (module.FileName.Equals("communicator.exe"))
        {
            process.Kill();
        }
    }
}

多くのコンピューター (WinXP 32/64、Win7 32/64、Win8 64) でこのツールを使用する必要があり、両方のタイプのアーキテクチャで動作するにはこのツールが必要です。これを達成する方法は?

4

2 に答える 2

2

を使用Process.GetProcessesByName()します。ほとんどの場合、(メイン) モジュールの名前を探すのと同じです。これにより複数のプロセスが返されるという事実に対処する必要があるため、それらすべてを強制終了したい場合とそうでない場合がありますが、YMMV.

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

また、メソッドは非同期で実行されることにも注意してくださいKill。つまり、それぞれのプロセスが実際に強制終了される前に戻る可能性があります。Process.WaitForExit()気が向いたら追加します。

于 2013-06-10T13:20:43.210 に答える