【问题标题】:How do I determine which process is using a serial port?如何确定哪个进程正在使用串行端口?
【发布时间】:2008-09-03 17:46:21
【问题描述】:

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

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

有没有办法:

  • 查找当前正在使用给定串行端口的应用/服务的名称/pid 或
  • 从其他应用窃取串行端口连接。

vb.net 最好,但我也会采用与语言无关的答案。

【问题讨论】:

    标签: vb.net serial-port


    【解决方案1】:

    您也可以使用来自 SysInternals 的 process explorer 工具来搜索打开的句柄。在这种情况下,您可能需要搜索“Serial”,因为它使用的设备名称可能不会映射到 COM 端口号。 (例如 COM1 在我的系统上是 \Device\Serial0)。

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

    【讨论】:

    • 太好了。奇怪的是,它似乎适用于我的 Windows XP PC 上的所有端口除了我感兴趣的端口:使用 Windows usbser.sys 驱动程序的 USB 串行端口。
    • 还有更多例外:串口转以太网转换器。 (例如 Moxa NPort 转换器使用:\Device\NPdrv...
    • 我的 USB 串口适配器名为 \Device\USBSER0000
    【解决方案2】:

    作为Rob Walker said,您可以使用Process Explorer 查找谁在使用串行端口。大多数情况下,键入 Ctrl+F 并搜索“serial”会显示谁打开了串行端口,但我只是遇到了我的“COM3 " 串口的句柄显示为 "\Device\VCP0"。这可能很奇怪,因为它是在带有 USB 转串口连接器的 VirtualBox 下运行的。

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

    【讨论】:

    • VCP(虚拟 com 端口)在 Serial 没有的地方工作 - 谢谢!
    【解决方案3】:

    Sysinternals 有大量实用程序,我觉得它们对于跟踪系统进程正在做什么非常有用且具有教育意义。

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

    -亚当

    【讨论】:

    • 遗憾的是,PortMon 不能在 64 位操作系统上运行,而现在大多数操作系统都是如此。假设你可以尝试运行一个虚拟机,但这不是我的选择。
    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 2013-02-11
    • 2011-04-04
    相关资源
    最近更新 更多