题
我工作的公司生产通过串行端口与计算机通信的硬件。第三方公司编写与我们的硬件通信的软件。
有时我需要诊断我们的硬件。但是,当 Windows 启动时,第三方软件应用程序会连接到串行端口,从而阻止任何其他连接。我不知道该应用程序/服务的名称,并且它并不总是相同的。
有没有办法:
- 查找当前正在使用给定串行端口的应用程序/服务的名称/pid 或
- 从另一个应用程序窃取串行端口连接。
最好是 vb.net,但我也会采用与语言无关的答案。
解决方案
您可以使用 流程浏览器 SysInternals 还提供了工具来搜索打开的句柄。在这种情况下,您可能需要搜索“串行”,因为它使用的设备名称可能无法映射到 com 端口号。(例如。COM1 在我的系统上是 \Device\Serial0)。
如果您想从另一个应用程序控制串行端口,我认为您需要驱动程序的合作。
其他提示
作为 罗布·沃克说, ,您可以使用以下命令找到谁正在使用串行端口 流程浏览器. 。大多数时候,打字 控制键+F 搜索“serial”将显示谁打开了串口,但我刚刚遇到了一种情况,我的“COM3”串口句柄显示为“\Device\VCP0”。这可能很奇怪,因为它是在带有 USB 转串口连接器的 VirtualBox 下运行的。
如果搜索“serial”和“device\vcp”没有得到任何结果,您可以通过使用已知程序打开串行端口句柄来弄清楚串行端口句柄是如何命名的。在 Process Explorer 中,通过键入以下内容显示下部窗格以及每个进程的打开句柄 控制键+L. 。单击用于打开串行端口的进程,然后查看下部窗格以查看哪些句柄看起来可能是串行端口。您可以在查看时打开和关闭端口,文件句柄应该出现和消失,并以绿色或红色突出显示。当然,只有当您有多个串行端口或者您尝试诊断的串行端口并不总是被某种神秘进程锁定时,这才有可能。