2011-02-08 4 views
0

우리는 다음과 같은 상황이 :호출하기 .NET GUI (COM)

하는 ATL COM 서버를 (아웃 - 오브 - PROC, EXE) COM은 연결 지점 개체를 개최하고 있습니다. 이러한 개체는 하나의 (exe) 프로세스 내부에 "살며"다른 프로세스 (예 : 다른 프로세스의 .NET GUI 응용 프로그램, ATL EXE의 "클라이언트" 서버)는 이러한 이벤트를 포착하여 이에 따라 대응할 수 있습니다.

현재 우리는 ATL 서버의 클라이언트 인 .NET 응용 프로그램 (Windows Forms)이 있습니다. 시작될 때 (두 번 클릭하면) 일부 대리자 (이벤트 처리기)가 ATL 서버에서 호스팅되는 COM 개체 이벤트 (연결 지점)에 연결됩니다. ATL 서버에서 이벤트가 발생할 때마다 .NET 클라이언트는 일반적으로 주 창에 정보를 표시하거나 사용자가 상호 작용할 수있는 새 창을 엽니 다. 이 솔루션은 다음 문서를 기반으로합니다 : http://www.codeproject.com/KB/COM/cominterop.aspx#ConnectionPoints (COM-.NET 이벤트 처리).

위의 시나리오에서는 사용자가 실제로 이벤트가 시작되기 전에 .NET 클라이언트 (exe)를 두 번 클릭했다고 가정합니다. 즉, .NET 응용 프로그램을 명시 적으로 엽니 다. .NET 클라이언트가 열리지 않으면 (인스턴스화 된) 실행 된 이벤트가 "손실"됩니다. 클라이언트가 처리하지 않습니다.

이벤트가 ATL 서버에서 해고되면, 윈도우 즉시 (팝업) 표시됩니다 사용자 (예를 들어 상호 작용하려면 :

우리는 다음과 같은 상황을 원하는 이메일 텍스트 상자를 채우기 & "Ok"를 누르십시오.) 모든 것을 수행하기 전에 .NET 클라이언트를 명시 적으로 시작할 필요가 없습니다. 이렇게하면 각 이벤트에 대해 사용자에게 알리고 대화식으로 반응 할 수 있습니다.

우리는 .NET 클라이언트 응용 프로그램을 ATL 서버 내에 dll로 호스팅하는 옵션을 보았지만 ATL EXE에서 GUI를 표시하는 것은 큰 "NO-NO"(모든 GUI가 아니라 WinForms 또는 WPF와 같은 .NET GUI).

서버 & 클라이언트가 두 개의 서로 다른 프로세스에서 실행되고 "클라이언트"가 아직 실행되고 있지 않은 경우 이것이 가능합니까? 누구나 같은 문제가 발생 했습니까? 그것이 해결 되었습니까 (그리고 어떻게 ...)?

감사합니다 ;-)

오므리

이에 대한 해결책이 있습니까?

답변

1

설명대로 작업 할 수 없습니다. 아무도 이벤트를 듣지 않으면 응답 할 수있는 방법이 없습니다. Trivially Startup 폴더에 바로 가기가있는 .NET 응용 프로그램을 시작하여 사용자가 로그인 한 상태에서 항상 실행되도록하여 문제를 해결하십시오. 서버에서 알림을받을 때까지 창을 만들 필요가 없습니다. 초점을 없애면 btw가 작동하지 않으므로 풍선이있는 NotifyIcon이 필요할 것입니다.

+0

고마워요! 나는 "시작 지름길"을 피할 수 없을 것이라고 생각했다. – OmriSela