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

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

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

有帮助吗?

解决方案

没有好的、简单的方法:

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

其他提示

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

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

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

  1. COM 端口的 GUID:{4d36e978-e325-11ce-bfc1-08002be10318}(CLSID_端口)
  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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top