2009-01-13 132 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); 
}