2009-01-13 79 views
3

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

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

我需要在.NET Framework,C#上的解决方案。

回答

6

有没有好的,简单的方法:

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

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

Win32 API function to programmatically enable/disable device

,你需要知道使用该解决方案的COM端口的信息是:

  1. 的GUID的COM端口:{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); 
}