有时我们的客户有“幽灵”应用程序(这意味着当我们在很长一段时间后(比如 72 小时以上)关闭应用程序时,我们有时会在视觉上关闭但仍在进程列表中的应用程序。
由于我们无法轻松重现,我们想知道哪个线程仍在运行。所以我们想提供一个非常小的工具,我们可以在其中选择一个进程(选择一个“幽灵”),然后显示我们可以获得的所有信息(主要运行的线程名称)。
所以:
- 这可能吗 ?不知道ac#应用能否访问到另一个应用的线程名?
- 是否有任何现有的应用程序可以进行这种“提取”
- 我们应该使用什么来访问此类信息?
有时我们的客户有“幽灵”应用程序(这意味着当我们在很长一段时间后(比如 72 小时以上)关闭应用程序时,我们有时会在视觉上关闭但仍在进程列表中的应用程序。
由于我们无法轻松重现,我们想知道哪个线程仍在运行。所以我们想提供一个非常小的工具,我们可以在其中选择一个进程(选择一个“幽灵”),然后显示我们可以获得的所有信息(主要运行的线程名称)。
所以:
您可以尝试进程资源管理器,这将显示正在运行的进程中线程的详细信息:
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
正如 Justin Harvey 所说,Process explorer 是一个很好的解决方案。
如果您希望提供自己的工具,您可能会对以下方面感兴趣:
Process.GetProcessByName() 和Process.Threads
用法
var process = Process.GetProcessByName("myprocess").FirstOrDefault();
var threads = process.Threads;
虽然您可以像这样访问另一个进程的线程信息:
Process[] p = Process.GetProcessesByName("YourProcess");
foreach (ProcessThread thread in p[0].Threads)
{
Console.WriteLine(thread.Id);
}
您不能访问线程的名称,但可以检索ProcessThread类中可用的信息。