2012-06-22 13 views
6

私は、プロセスが.NETのDebugger.IsAttachedへの呼び出しによってデバッグされているのがわかりましたが、私はそのPIDを取得できるようにしたいと思います。プロセスをデバッグするVisual Studio。これは可能ですか?私のプロセスをデバッグしているVisual StudioのPIDを見つけよう

+3

デバッガからプロセスが開始された場合、デバッガpidはデバッグされたプロセスの親pidになります。これは決定できます。デバッガがアクティブなプロセスにリモートで接続されているシナリオにもっと興味がありますか? – panickal

+1

VSがデバッガプロセスではない*いくつかのケースがあります。 64ビットコードやさまざまなホスティングシナリオのリモートデバッグやデバッグなど。あなたが情報を必要としないことは非常に重要です。これはXY質問です、Xを見ることができません。 –

答えて

2

this answerに記載されているTryGetVSInstanceメソッドを使用して、Visual StudioのEnvDTE COMオートメーションオブジェクトの各インスタンスを保持できます。一度それがあれば、DTE.Debugger.DebuggedProcessesコレクションを繰り返して、興味のあるプロセスと同じprocessIDを指しているかどうか確認してください。

+0

私は彼らがwin32 APIと呼べることを望んでいましたが、あなたはおそらく提案が最もクリーンな方法だと思います。ありがとう! – Robert

0

This私のために働いています。

public static Process GetParent(Process process) 
{ 
    var processName = process.ProcessName; 
    var nbrOfProcessWithThisName = Process.GetProcessesByName(processName).Length; 
    for (var index = 0; index < nbrOfProcessWithThisName; index++) 
    { 
     var processIndexdName = index == 0 ? processName : processName + "#" + index; 
     var processId = new PerformanceCounter("Process", "ID Process", processIndexdName); 
     if ((int)processId.NextValue() == process.Id) 
     { 
      var parentId = new PerformanceCounter("Process", "Creating Process ID", processIndexdName); 
      return Process.GetProcessById((int)parentId.NextValue()); 
     } 
    } 
    return null; 
} 
関連する問題