在我的C#应用程序中,我具有Windows服务的PID和threadID。我如何找到它是哪个服务(请注意:例如,svchost.exe的单个实例可以托管多个服务)?直接用C#或调用其他实用程序对我来说都很好。
Process Hacker可以显示服务名称(进程的属性->选项卡线程->列服务)。
到目前为止,我已经找到了进程以及线程:
var p = Process.GetProcessById(pid);
var t = p.Threads.Cast<ProcessThread>().SingleOrDefault(t => t.Id == threadId);
怎么继续?备择方案?
通常,您不能这样做。线程与服务之间没有1:1的关系。单个线程可以运行多个服务,而单个服务可以(通常确实)具有多个线程。
Process Hacker可能使用某种启发式方法,例如,跟踪线程的调用堆栈并标识svchost.exe
正在运行的DLL 。又或者,它假定线程与调用ServiceMain()的线程相同;可能存在一种未记录的识别该方法的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句