如何解锁COM端口

3

我有一个应用程序,在另一个应用程序之后必须工作。这个第二个应用程序有一个 bug,会导致在特定情况下 COM 端口没有关闭。

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

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

2个回答

6

没有好的、简单的方法:

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

0

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

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

您需要知道使用该解决方案来处理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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接