2012-06-22 27 views
6

Tôi biết tôi có thể tìm thấy nếu một quá trình đang được gỡ lỗi thông qua một cuộc gọi đến Debugger.IsAttached in .NET, nhưng tôi muốn có thể nhận được PID của Visual Studio đó là gỡ lỗi các quy trình. Điều này có thể không?Tìm pid của Visual Studio đang gỡ lỗi quy trình của tôi

+3

Nếu quá trình được bắt đầu từ trình gỡ rối, pid trình gỡ lỗi sẽ là pid cha của quá trình gỡ lỗi và điều này có thể được xác định. Bạn có hứng thú hơn với kịch bản mà trình gỡ rối được gắn từ xa vào một tiến trình đang hoạt động hay không. – panickal

+1

Có một số trường hợp mà VS là * không * quá trình gỡ lỗi. Giống như gỡ lỗi từ xa hoặc gỡ lỗi mã 64 bit hoặc các kịch bản lưu trữ khác nhau. Khá quan trọng là bạn không cần thông tin. Đây là một câu hỏi XY, không thể nhìn thấy X. –

Trả lời

2

Bạn có thể sử dụng phương pháp TryGetVSInstance được nêu trong this answer để giữ một trường hợp của từng đối tượng Tự động hóa EnvDTE COM của Visual Studio. Khi bạn đã có, chỉ cần lặp lại bộ sưu tập DTE.Debugger.DebuggedProcesses và kiểm tra xem có bất kỳ người trong số họ đang trỏ đến cùng một processID như quy trình mà bạn quan tâm.

+0

Tôi đã hy vọng họ sẽ là một win32 api bạn có thể gọi, nhưng tôi nghĩ rằng bạn đang gợi ý có lẽ là cách sạch nhất. Cảm ơn! – Robert

0

This làm việc cho tôi.

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; 
} 
Các vấn đề liên quan