2012-06-22 12 views
6

Wiem, że mogę znaleźć, jeśli proces jest debugowany przez wywołanie Debugger.IsAttached w .NET, ale chciałbym móc uzyskać PID Visual Studio, czyli debugowanie procesów. czy to możliwe?Znajdź pid Visual Studio, który debuguje mój proces

+3

Jeśli proces jest uruchamiany z debuggera, pid debugera będzie rodzicielskim pid debugowanego procesu i można to ustalić. Czy jesteś bardziej zainteresowany scenariuszem, w którym debugger jest zdalnie podłączony do aktywnego procesu. – panickal

+1

Istnieje kilka przypadków, w których VS to * nie * proces debuggera. Podobnie jak zdalne debugowanie lub debugowanie kodu 64-bitowego lub różnych scenariuszy hostingu. Bardzo ważne, że nie potrzebujesz informacji. To jest pytanie XY, nie widzę X. –

Odpowiedz

2

Można użyć metody TryGetVSInstance opisanej w this answer, aby uzyskać wstrzymanie każdego wystąpienia obiektu EnvDTE COM Automation programu Visual Studio. Gdy już to zrobisz, po prostu przetestuj kolekcję DTE.Debugger.DebuggedProcesses i sprawdź, czy którykolwiek z nich wskazuje ten sam identyfikator procesu, co proces, który cię interesuje.

+0

Miałem nadzieję, że będą one ap32 win32 można nazwać, ale myślę, że sugestia jest prawdopodobnie najczystszym sposobem. Dzięki! – Robert

0

This dla mnie.

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; 
} 
Powiązane problemy