2012-06-22 8 views
6

So che posso trovare se un processo viene eseguito il debug tramite una chiamata a Debugger.IsAttached in .NET, ma mi piacerebbe essere in grado di ottenere il PID del Visual Studio che esegue il debug dei processi. È possibile?Trova il pid di Visual Studio che esegue il debug del mio processo

+3

Se il processo viene avviato dal debugger, il pid del debugger sarà il pid padre del processo di debug e questo può essere determinato. Sei più interessato allo scenario in cui il debugger è collegato in remoto a un processo attivo. – panickal

+1

Ci sono diversi casi in cui VS * non * è il processo del debugger. Come il debug remoto o il debug di codice a 64 bit o vari scenari di hosting. Piuttosto importante che tu non abbia bisogno di informazioni. Questa è una domanda XY, non riesco a vedere la X. –

risposta

2

È possibile utilizzare il metodo TryGetVSInstance descritto in this answer per ottenere una sospensione di ogni istanza dell'oggetto di automazione COM EnvDTE di Visual Studio. Una volta fatto, basta ripetere la raccolta DTE.Debugger.DebuggedProcesses e controllare se qualcuno di essi punta allo stesso processID del processo che ti interessa.

+0

Speravo che potessero essere una API win32 che potevi chiamare, ma penso che il tuo suggerimento sia probabilmente il modo più pulito. Grazie! – Robert

0

This ha funzionato per me.

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; 
} 
Problemi correlati