2011-12-06 6 views
1

COM 서버를 사용하는 .NET 응용 프로그램이 있습니다. COM 서버는 내가 실행하는 컴퓨터에 등록되어 있으므로 코드가 new MyInterop.SomeObject()에 도달하면 적절한 MyComServer.exe이 시작됩니다..NET interop에서 사용할 COM 서버를 지정하는 방법은 무엇입니까?

그러나 디버깅하는 동안 MyComServer.exe의 복사본이 여러 가지 폴더에 있고 다른 구성 파일이 있습니다. 내 앱이로드해야하는 것을 지정하고 싶습니다. 내가 아는

두 가지 해결 방법은 다음과 같습니다

  • 내가 그것을 사용하기 전에 때마다 (MyComServer.exe /regserver)를 다시 등록 할 수 있습니다. 그러나 저는 지역 문제에 대한 글로벌 솔루션을 사용하는 것을 좋아하지 않습니다.
  • MyComServer.exe을 수동으로 시작한 다음 (독립 실행 형 응용 프로그램으로 실행) COM 인프라가이 기존 프로세스를 다시 사용합니다. 하지만 그건별로 자동화가되지 않습니다.

더 적절한가요?

답변

0

디버그 버전을 기반으로 구성 파일을 동적으로 만들 수 있습니다.

+0

흠? 또한 여러 앱 인스턴스를 각각 다른 서버에 연결하여 병렬로 실행하려면 어떻게해야합니까? –

+0

아, 당신은 그 다른 서버가 필요합니다 동시 응용 프로그램을 가지고 있다면 .. 원래 서버의 여러 디버그 버전을 구축하는 것이 좋습니다 .. 비록 잠재적 인 레지스트리 혼란 .. 당신의 마지막 의견을 이해하지 못한다면 당신은 있다. –

+0

글쎄요, 현재 그것은 단지 가설적인 시나리오 일뿐입니다. 그리고 나는 결코 그것을 할 필요가 없기를 희망합니다 ... 그러나 나는 준비되기를 좋아합니다. 그래서 당신은 말하고 있습니다 - COM은 그러한 타락을 허용하지 않습니다? –

1

새로운 MyInterop.SomeObject() 호출로 COM 서버 .exe가 시작되었습니다. .NET을 제대로 종료하지 않고 파이널 라이저 스레드의 참조 횟수를 줄이지 않고도 디버깅 중에 프로그램을 종료 했으므로 많은 .exe가 실행되고있는 것은 틀림 없습니다. COM에는 이러한 손실 된 참조를 정리하는 메커니즘이 없습니다. Taskmgr.exe, Process 탭을 사용하여 실행중인 인스턴스를 종료하기 만하면됩니다.

COM에는 ROT (실행 개체 테이블)를 통해 실행중인 서버 인스턴스에 연결하는 메커니즘이 있습니다. 그러나 이것은 나중에 볼트로 고정 할 수있는 것이 아니며 서버가 명시 적으로 지원해야합니다. 서버와 함게 옵션을 지정해야하는 경우 대신 인 - 프로세스 서버로 설정하는 것이 좋습니다. 훨씬 덜 골칫거리.