我工作的公司制造通过串行端口与计算机通信的硬件。第三方公司编写与我们的硬件通信的软件。
有时我需要诊断我们的硬件。但是,当 Windows 启动时,第三方软件应用程序会连接到串行端口,从而阻止任何其他连接。我不知道这个应用程序/服务的名称,而且它并不总是同一个。
有没有办法:
- 查找当前正在使用给定串行端口的应用程序/服务的名称/pid 或
- 从另一个应用程序窃取串行端口连接。
最好是 vb.net,但我也会采用与语言无关的答案。
我工作的公司制造通过串行端口与计算机通信的硬件。第三方公司编写与我们的硬件通信的软件。
有时我需要诊断我们的硬件。但是,当 Windows 启动时,第三方软件应用程序会连接到串行端口,从而阻止任何其他连接。我不知道这个应用程序/服务的名称,而且它并不总是同一个。
有没有办法:
最好是 vb.net,但我也会采用与语言无关的答案。
您也可以使用 SysInternals 中的流程浏览器工具来搜索打开的句柄。在这种情况下,您可能需要搜索“Serial”,因为它使用的设备名称可能不会映射到 COM 端口号。(例如 COM1 在我的系统上是 \Device\Serial0)。
如果您想从另一个应用程序控制串行端口,我认为您需要驱动程序的合作。
正如Rob Walker 所说,您可以使用Process Explorer找到谁在使用串行端口。大多数情况下,键入Ctrl+F并搜索“serial”会显示谁打开了串行端口,但我只是遇到了我的“COM3”串行端口的句柄显示为“\Device\VCP0”的情况。这可能很奇怪,因为它是在带有 USB 转串行连接器的 VirtualBox 下运行的。
如果搜索“serial”和“device\vcp”没有得到任何结果,您可以通过使用已知程序打开一个串口句柄来弄清楚串口句柄是如何命名的。Ctrl在 Process Explorer 中,通过键入+显示带有每个进程的打开句柄的下部窗格L。单击您用于打开串行端口的进程,并通过下部窗格查看哪些句柄看起来可能是串行端口。您可以在查看时打开和关闭端口,文件句柄应该出现和消失,并以绿色或红色突出显示。当然,这只有在您有多个串行端口或您尝试诊断的串行端口并不总是被某个神秘过程锁定时才有可能。
Sysinternals有许多实用程序,我发现它们对于跟踪进程对系统所做的事情非常有用且具有教育意义。
他们有一个实用程序可以完全满足您的需求,称为Portmon,并在页面底部附近提供了一些关于它如何工作的信息。如果实用程序还不够,这些信息和一些问得很好的问题可能会为您提供自己实现它所需的一切。
-亚当