2013-09-30 6 views
0

Иногда у нас есть приложение «призрак» наших клиентов (это означает, что когда мы закрываем приложение через много времени (например, 72 часа), у нас есть, иногда приложение, которое визуально закрыто но все еще находится в списке процессов.Список текущих потоков внешнего процесса

Поскольку мы не можем легко воспроизвести, мы хотели бы знать, какой поток все еще работает. Поэтому мы хотели бы предоставить очень маленькие инструменты, в которых мы можем выбрать процесс (выберите тот, который является «призрак»), а затем отображать всю информацию, которую мы можем получить (Нити имена, которые работают в основном)

Итак:.

  1. Возможно ли это? Я не знаю, может ли приложение C# получить доступ к имени потока другого приложения?
  2. Есть ли какое-либо существующее приложение, которое может делать этот вид «извлечения»
  3. Что мы должны использовать для доступа к этой информации?
+0

Это приложение для сторонних разработчиков? То есть один у вас нет контроля? – Surfbutler

+0

Некоторые, другие нет, например. мы уже обнаружили один раз поток, который был заблокирован Windows при утилизации сокета, который имел полную очередь – J4N

+0

Нет, мы разрабатываем это приложение, но мы не хотим помещать эти инструменты в приложение, поскольку: проблема возникает, когда мы закрывают приложение, и мы не хотим добавлять больше потоков, и мы хотели бы иметь диагностическое программное обеспечение. – J4N

ответ

2

Как уже упоминалось Джастин Харви, Process Explorer является хорошим решением.

Если вы хотите, чтобы предоставить свой собственный инструмент, вы можете быть interrested в:

Process.GetProcessByName() и Process.Threads

Использование

var process = Process.GetProcessByName("myprocess").FirstOrDefault(); 
var threads = process.Threads; 
2

Вы можете попробовать Process Explorer, это покажет детали резьбы в пределах запущенного процесса:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Process Explorer Threads

+0

Хорошо, я даю ему попробовать прямо сейчас! – J4N

+0

Есть ли способ получить больше информации о потоке? Поскольку я не знаю, могу ли я извлечь позицию в свой код с помощью StartAddress, если нет, я не уверен, как я могу использовать его для моей текущей проблемы – J4N

1

В то время как вы можете получить доступ к потоковой информации другого процесса как такового :

Process[] p = Process.GetProcessesByName("YourProcess"); 
foreach (ProcessThread thread in p[0].Threads) 
{ 
    Console.WriteLine(thread.Id); 
} 

Вы не можете получить доступ к названию потока, но вы можете получить информацию, доступную в классе ProcessThread.

Смежные вопросы