2011-10-05 2 views
4

현재 실행중인 응용 프로그램이 작동하지 않는 다른 도메인에있는 다른 응용 프로그램에 어떻게 알릴 수 있습니까? 다시 말해, 별도의 도메인에서 두 개의 다른 응용 프로그램을 협상 할 수 있습니까?별도의 도메인에있는 두 응용 프로그램 협상

미리 감사드립니다.

답변

3

이러한 종류의 IPC에는 명명 된 파이프를 사용할 수 있습니다. 이를 위해 System.IO.Pipe s 네임 스페이스와 우수한 NamedsPipeServerStream & NamedPipeClientStream 클래스를 살펴보십시오.

동일한 도메인 내의 프로세스 간 통신에만 익명 파이프를 사용할 수 있지만 IPC는 동일한 도메인의 IPC (즉 동일한 인트라넷에있는 PC)에서 IPC 용 명명 된 파이프를 사용할 수 있습니다.

0

AppDomain.UnhandledException 이벤트를 사용하여 이름이 지정된 뮤텍스를 통해 다른 AppDomain을 알릴 수 있습니다. 시스템 전반에 걸쳐 있으므로 "MyAppHasCrashed"라는 파일을 만들어 즉시 잠글 수 있습니다. 처리되지 않은 예외가 발생하면 뮤텍스를 해제합니다. 다른쪽에는 뮤텍스를 기다리는 스레드가 있어야합니다. 처음에 차단되었으므로 스레드가 대기합니다. 예외가 발생하면 스레드가 다시 시작되고 사용자는 충돌을 처리 할 수 ​​있습니다.

Mutex crashed = new Mutex(true, "AppDomain1_Crashed"); 
... 
private void AppDomain_UnhandledException(...) 
{ 
    // do whatever you want to log/alert the user 
    // then unlock the mutex 
    crashed.ReleaseMutex(); 
} 

그런 다음, 다른 쪽 :

void CrashWaitThread() 
{ 
    try { 
     crashed = Mutex.OpenExisting("AppDomain1_Crashed"); 
    } 
    catch (WaitHandleCannotBeOpenedException) 
    { 
     // couldn't open the mutex 
    } 
    crashed.WaitOne(); 
    // code to handle the crash here. 
} 

이 해킹의 비트,하지만 그것은 도메인 간 및 프로세스 간 두 경우 모두에 대해 잘 작동합니다.

+1

"도메인 간"은 다른 컴퓨터를 의미합니다. mutex는 한 대의 컴퓨터에만 적용됩니다. – Richard

+0

@Richard - 죄송합니다. 한 대의 컴퓨터에서 AppDomain을 처리하고 있다고 생각했습니다. – Polynomial

+1

내가 읽지 못하고 잘못된 질문에 답하는 질문의 수는 당황 스럽지만 너무 많습니다 ... 우리 모두 해냈습니다. – Richard

1

예 가능합니다. 이것이 .NET 유형에서 얼마나 잘 지원되는지는 "충돌"여부를 결정하는 방법에 따라 다릅니다.

기본적으로 모니터링 응용 프로그램은 모니터링되는 응용 프로그램을 실행해야하는 시스템에 액세스하는 데 적합한 자격 증명을 제공해야합니다.

net use \\Fileserver1.domain2.com\IPC$ /user:DOMAIN\USER PASSWORD 

또는 API의 equaivalent :이 하나가 something like으로 시작하여 다른 도메인에/파일을 복사 할 것이라고 정확히 것입니다.

는 WMI를 사용하는 경우 (이것은 명백한 방법, Win32_Process에 대한 쿼리와 원격 시스템에서 프로세스를 나열하기 쉽다)는합니다 (scripting interface 또는 in .NET와 예.) 자격 증명을 제공 할 수 있습니다.

관련 문제