如何解锁COM端口

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

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

我需要一个关于.NET Framework,C#的解决方案。

没有好的,简单的方法:

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

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

Win32 API函数以编程方式启用/禁用设备

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

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

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

// Find the index of our instance. ie 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); }