2011-12-06 4 views
2

いつも取得しますか?アクセスが拒否されました|デバッグ中の例外?デバッグは失敗しますが、他のケースでも動作します

foreach(Process p in Process.GetProcesses()) 
{ 
    string module=p.MainModule.Filename; 
} 

どのようなプロセスであっても、例外は常に呼び出されます。 しかし、私はデバッグをしなくても起動します。 途中でプロセスのフルパスを取得したいと思います。

答えて

3

実行中ではなくなったプロセスへの参照を照会しているため、アクセスが拒否されました(Win32Exception厳密になります)エラーが発生します。 GetProcessesは配列を返します。リストが返された後にプロセスが終了した場合、プロセスを照会しようとするとこの例外が発生します。

デバッグなしで動作するのは偶然です。

これを試してみてください。メモ帳を起動します。次のコードを実行します。

var processes = Process.GetProcesses(); 
Console.WriteLine("press enter"); 
Console.ReadLine(); 
foreach (var p in processes) Console.WriteLine(p.MainModule.FileName); 

「press enter」と出力されたときにメモ帳を閉じます。あなたがメモ帳のProcessインスタンスを照会しようとしているときに、Enterを押すと例外が発生します。

関連する問題