문제

다른 응용 프로그램 후에 작동 해야하는 응용 프로그램이 있습니다. 이 두 번째 응용 프로그램에는 특정 상황에서 COM 포트가 닫히지 않도록하는 버그가 있습니다.

응용 프로그램에 프로그래밍 방식으로 모든 COM 포트를 닫아 보고서는보고 된 Close Port에 대한 버그가 없을 것입니다. COM 포트를 열었던 개체를 소유하지 않으면 가능합니까?

.NET Framework, C#에 대한 솔루션이 필요합니다.

도움이 되었습니까?

해결책

좋은 방법은 없습니다.

  • 좋은 방법은 다른 응용 프로그램을 수정하는 것입니다. 또는 불가능한 경우, 필터 장치 드라이버 (Parport Driver와 유사하지만 평행 포트 대신 일련 포트의 경우)를 작성하고 직렬 포트 하드웨어 드라이버 위에 놓여 있고 하나 이상의 연결 지점 (사용한 연결 지점)을 노출시킵니다. 기본 실제 드라이버로 전달되는 다른 응용 프로그램과 자신의 응용 프로그램에서 사용하는 다른 '백 도어'... 실제 드라이버는 한 명의 클라이언트 만 볼 수 있습니다. 즉, 필터 드라이버는 그 위에 있습니다).
  • an 쉬운 길은 다른 과정을 핵무기 (강제 종료)하는 것입니다.

다른 팁

나는 최근에 이것을 발견했고 약간 추가 할 것입니다 ... 대부분의 COM 포트 드라이버는 장치 관리자에서 장치가 활성화되고 비활성화 될 때 포트를 "잠금 해제"합니다. 이것은이 작업을 수행하는 (C#) 방법이 솔루션에 설명되어 있음을 의미합니다.

Win32 API 기능을 프로그래밍 방식으로 활성화/비활성화하는 기능

COM 포트에 해당 솔루션을 사용하기 위해 알아야 할 정보는 다음과 같습니다.

  1. 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top