【问题标题】:How to unlock COM port如何解锁 COM 端口
【发布时间】:2009-01-13 14:39:32
【问题描述】:

我有一个应用程序必须在另一个应用程序之后运行。第二个应用程序有一个错误会导致 COM 端口在特定情况下不关闭。

我想在我的应用程序中以编程方式关闭所有 COM 端口,以确保不会报告有关关闭端口的错误。如果我不拥有打开 COM 端口的对象,是否有可能?

我需要 .NET Framework、C# 的解决方案。

【问题讨论】:

    标签: c# serial-port unlock


    【解决方案1】:

    没有好的、简单的方法:

    • 好的方法是修复其他应用程序;或者如果这不可能,编写一个过滤设备驱动程序(类似于 parport 驱动程序,但用于串行端口而不是并行端口),它将位于串行端口硬件驱动程序的顶部,并且会暴露多个连接点(一个由另一个应用程序,它传递到底层的真实驱动程序,以及您自己的应用程序使用的另一个“后门”......真正的驱动程序只会看到一个客户端,即位于其顶部的过滤器驱动程序)
    • 一种简单的方法是核对(强制终止)另一个进程。

    【讨论】:

      【解决方案2】:

      我最近遇到了这个问题,并且有一点要补充... 大多数 COM 端口驱动程序在设备管理器中启用和禁用设备时“解锁”端口。这意味着解决方案中描述了完成此任务的(C#)方式:

      Win32 API function to programmatically enable/disable device

      为 COM 端口使用该解决方案需要了解的信息是:

      1. COM 端口的 GUID:{4d36e978-e325-11ce-bfc1-08002be10318} (CLSID_Ports)
      2. 您要重置的端口的“实例路径”

      由于您说要重置 所有 端口,因此您需要修改该示例中的库以通过更改循环遍历所有端口:

      // Find the index of our instance. i.e. the touchpad mouse - I have 3 mice attached...
      int index = GetIndexOfInstance(diSetHandle, diData, instanceId);
      // Disable...
      EnableDevice(diSetHandle, diData[index], enable);
      

      到这样的事情:

      for (int index = 0; index < diData.Length; index++)
      {
          EnableDevice(diSetHandle, diData[index], enable);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 2019-05-29
        相关资源
        最近更新 更多