代码之家  ›  专栏  ›  技术社区  ›  James

.NET-查找外部应用程序主线程ID

  •  2
  • James  · 技术社区  · 17 年前

    我在找把手 主要的 外部应用程序的线程。我试图找到主线程的程序是多线程的,重要的是我总是能找到主线程。我知道这个程序最多只能运行一个副本。我现在是这样做的:

    Process[] someProcesses = Process.GetProcessesByName("some");
    IntPtr threadHandle = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)someProcesses[0].Threads[0].Id);
    

    大多数时候,Threads[0]是主线程,但其他时候它不是。我如何确保我找到的线程是其他应用程序的主线程?

    谢谢你。

    2 回复  |  直到 17 年前
        1
  •  3
  •   Brian Rasmussen    17 年前

    这是一个疯狂的猜测,但通过 Processes ,你可以得到一个 ProcessThreadCollection 通过 Threads 财产。每个线程都有一个 StartTime (可用 Ticks 同样),因此假设主线程是第一个启动的线程,您可以选择启动时间最低的线程。

    否则,如果您可以获得每个线程的调用堆栈,则可以查找应用程序入口点。我找不到相应的托管调用,但我相信您可以通过P/Invoke获得它。

        2
  •  0
  •   Firo    13 年前

    谈论迟到聚会——但如果有人在谷歌搜索或其他搜索中发现了这一点,我会如何识别我的主线 Thread.CurrentThread.Name 当我的应用程序启动时,将其设置为一个值(如“Main”)。