2012-06-22 3 views
6

Я знаю, что могу найти, отлаживается ли процесс через вызов Debugger.IsAttached в .NET, но я бы хотел получить PID из Visual Studio - это отладка процессов. Это возможно?Найти pid Visual Studio, который отлаживает мой процесс

+3

Если процесс запущен из отладчика, pid отладчика будет родительским pid отлаживаемого процесса, и это можно определить. Вас больше интересует сценарий, когда отладчик удаленно подключен к активному процессу. – panickal

+1

Существует несколько случаев, когда VS - это * не * процесс отладчика. Подобно удаленной отладке или отладке 64-битного кода или различных сценариев размещения. Очень важно, что вам не нужна информация. Это вопрос XY, я не вижу X. –

ответ

2

Вы можете использовать метод TryGetVSInstance, описанный в this answer, чтобы получить доступ к каждому экземпляру объекта автоматизации Visual Studio EnvDTE COM Automation. Как только вы это сделаете, просто повторите сборку DTE.Debugger.DebuggedProcesses и проверьте, указали ли какие-либо из них на тот же идентификатор процесса, что и процесс, который вас интересует.

+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; 
} 
Смежные вопросы