C# 获取进程阻塞COM端口的PID

C# 获取进程阻塞COM端口的PID,c#,python,windows,serial-port,C#,Python,Windows,Serial Port,如何在Windows 7和/或更高版本上获取阻止某个COM端口的进程的进程id 我希望以编程方式获取PID。如果可以使用Python或C,但语言并不重要,我只想了解过程。在过去10年左右的时间里,这个问题在SO和许多其他论坛上被问过无数次。普遍接受的答案是使用sysinternals来查找使用特定文件句柄的进程。请记住,就win32 api而言,串行端口实际上只是一个文件 所以,给你两个答案: 使用sysinternals查找有问题的应用程序。我认为这种方法在python上不起作用,但您可能会在

如何在Windows 7和/或更高版本上获取阻止某个COM端口的进程的进程id


我希望以编程方式获取PID。如果可以使用Python或C,但语言并不重要,我只想了解过程。

在过去10年左右的时间里,这个问题在SO和许多其他论坛上被问过无数次。普遍接受的答案是使用sysinternals来查找使用特定文件句柄的进程。请记住,就win32 api而言,串行端口实际上只是一个文件

所以,给你两个答案:

使用sysinternals查找有问题的应用程序。我认为这种方法在python上不起作用,但您可能会在.NET上进行黑客攻击。 在getHandles函数中使用NtQuerySystemInformation。查看结构,找出哪些字段对识别违规流程有用。 使用应用程序对已知串行端口执行os.systemtaskkill之类的操作。最后,我们将介绍更多关于这个想法的内容。 第二个想法听起来很有趣,但我觉得在这种情况下,果汁不值得挤。现在,实际上使用串行端口的进程相对较少,如果您在特定的问题域中工作,那么您很清楚应用程序的名称


我会通过os.system运行taskkill,对我知道1可以安全关闭,2可能实际有一个端口打开的任何应用程序运行taskkill。使用这种方法,您将省去枚举文件句柄的麻烦,重新关注应用程序真正应该做什么。

到目前为止您做了哪些尝试?A.K.A为什么这是一个如此的问题而不是谷歌的查询?谢谢你的评论。到目前为止,我只能列出注册表中的所有端口。不幸的是,谷歌帮不了我多少忙,但我对windows操作系统不太熟悉。如有任何建议,将不胜感激。