关于vb.net:如何确定哪个进程正在使用串行端口?

关于vb.net:如何确定哪个进程正在使用串行端口?

How do I determine which process is using a serial port?

我工作的公司制造的硬件可通过串行端口与计算机通信。第三方公司编写与我们的硬件通信的软件。

有时候我需要诊断我们的硬件。但是,Windows启动时,第三方软件应用程序将连接到串行端口,从而阻止任何其他连接。我不知道此应用程序/服务的名称,并且它并不总是相同的。

有什么办法可以实现:

  • 查找当前正在使用给定串行端口的应用程序/服务的名称/ pid,或
  • 从另一个应用程序窃取串行端口连接。

最好是

vb.net,但我也会接受与语言无关的答案。


您也可以从SysInternals使用流程浏览器工具来搜索打开的句柄。在这种情况下,您将要搜索"串行",因为它使用的设备名称可能未映射到COM端口号。 (例如,我系统上的COM1为\\\\ Device \\\\ Serial0)。

如果您想从另一个应用程序控制串行端口,我认为您需要驱动程序的配合。


正如Rob Walker所说,您可以使用Process Explorer查找谁正在使用串行端口。大多数情况下,键入Ctrl F并搜索" serial"将显示谁打开了串行端口,但是我遇到了一种情况,其中" COM3"串行端口的句柄显示为" \\\\ Device \\\\ VCP0"。可能很奇怪,因为它在带有USB到串行连接器的VirtualBox下运行。

如果搜索" serial"和" device \\\\ vcp"没有得到任何结果,则可以通过使用已知程序打开一个端口句柄来弄清楚如何命名串行端口句柄。在"进程资源管理器"中,通过键入Ctrl L显示带有每个进程打开句柄的下部窗格。单击您用来打开串行端口的过程,然后浏览下面的窗格以查看哪些句柄看起来像是串行端口。您可以在查看时打开和关闭端口,文件句柄应显示和消失,并以绿色或红色突出显示。当然,只有当您有多个串行端口或者您要诊断的串行端口并非总是被某个神秘过程锁定时,这才可能实现。


Sysinternals有很多实用程序,我发现它们对于跟踪系统正在执行的进程非常有用且具有教育意义。

他们有一个完全可以满足您需求的实用程序,称为Portmon,并在页面底部附近提供了有关其工作方式的一些信息。如果实用程序不够用,该信息和一些问得很好的问题可能会为您提供自己实现它所需的一切。

-亚当


推荐阅读