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