C# 列出外部进程的运行线程

C# 列出外部进程的运行线程,c#,.net,multithreading,process,C#,.net,Multithreading,Process,有时我们的客户会使用“ghost”应用程序(这意味着,当我们在一段时间后(如72小时以上)关闭应用程序时,我们有时会使用可视关闭但仍在流程列表中的应用程序 由于我们不能很容易地复制,我们想知道哪个线程仍在运行。因此我们想提供一个非常小的工具,我们可以在其中选择一个进程(选择一个“幽灵”),然后显示我们可以获得的所有信息(主要运行的线程名称) 因此: 这可能吗?我不知道c#应用程序是否可以访问 另一个应用程序的线程名称 是否有任何现有的应用程序可以进行这种“提取” 我们应该使用什么来访问此类信息

有时我们的客户会使用“ghost”应用程序(这意味着,当我们在一段时间后(如72小时以上)关闭应用程序时,我们有时会使用可视关闭但仍在流程列表中的应用程序

由于我们不能很容易地复制,我们想知道哪个线程仍在运行。因此我们想提供一个非常小的工具,我们可以在其中选择一个进程(选择一个“幽灵”),然后显示我们可以获得的所有信息(主要运行的线程名称)

因此:

  • 这可能吗?我不知道c#应用程序是否可以访问 另一个应用程序的线程名称
  • 是否有任何现有的应用程序可以进行这种“提取”
  • 我们应该使用什么来访问此类信息

  • 您可以尝试process explorer,这将显示正在运行的进程中线程的详细信息:


    您可以尝试process explorer,它将显示正在运行的进程中线程的详细信息:


    正如Justin Harvey所提到的,Process explorer是一个很好的解决方案

    如果您希望提供自己的工具,请访问:

    用法

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

    正如Justin Harvey提到的,Process explorer是一个很好的解决方案

    如果您希望提供自己的工具,请访问:

    用法

    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);
    }
    

    无法访问线程的名称,但可以检索类中可用的信息。

    同时可以访问其他进程的线程信息,例如:

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

    无法访问线程的名称,但可以检索类中可用的信息。

    这是第三方应用程序吗?即,您无法控制的应用程序?某些,其他不是,例如,我们已经发现一个线程在处理队列已满的套接字时被windows阻止。否,我们开发了该应用程序但是我们不想把这些工具放在应用程序中,因为:问题发生在我们关闭应用程序时,我们不想添加更多线程,我们希望有一个诊断软件。好的,我只是在想,对于您自己的应用程序,应该始终可以确保关闭所有后台线程在GUI(主)线程退出之前。我们自己的应用程序存在此问题,直到我确保所有后台线程都已正确关闭,即使是在出现异常之后。@Surfbutler,是的,这将是最好的,但我们目前没有集中的“管理器”它知道我们正在使用的所有线程。这是第三方应用程序吗?即您无法控制的应用程序?一些,其他不是,例如,我们已经发现一个线程在处理一个队列已满的套接字时被windows阻止。否,我们开发此应用程序,但我们不想将此工具放在应用程序中,因为:问题m发生在我们关闭应用程序时,我们不想添加更多线程,我们希望有一个诊断软件。好的,我只是在想,对于您自己的应用程序,应该始终可以确保在GUI(主)之前关闭所有后台线程线程退出。我们自己的应用程序有这个问题,直到我确保所有后台线程都正确关闭,即使在出现异常后也是如此。@Surfbutler,是的,这是最好的,但我们目前没有一个集中的“管理器”它知道我们正在使用的所有线程。有没有办法获得线程的更多信息?因为我不知道是否可以用StartAddress提取代码中的位置,如果没有,我不确定如何使用它解决当前的问题有没有办法获得线程的更多信息?因为我不知道是否可以提取位置在我的StartAddress代码中,如果没有,我不确定如何使用它解决当前的问题