2016-10-14 2 views
-2

나는 서비스가 시작될 때 시작되고 서비스가 중지되면 종료되어야하는 모든 사용자 세션에서 실행할 수있는 서비스 및 일부 하위 프로세스가있는 Delphi에서 2 개의 프로그램을 보유하고 있습니다.서비스에서 안전하게 응용 프로그램 닫기

서비스가 중지되면 formClose/FormDestroy 이벤트를 catch하도록 안전하게 자식 응용 프로그램을 닫아야합니다.

서비스는 데스크톱 통신을 사용할 수 없으므로 WM_Close 등과 같은 WM를 해당 프로세스에 보낼 수 없습니다.

그래서

...를 TerminateProcess는 formClose/FormDestroy 이벤트 내 자식 프로세스에서 발생하지 않습니다 호출, 자식 프로세스의 종료 어떤 방법이 여기에 사용할 수있다?

현재 우리가 가진 유일한 생각은 각 사용자 세션에서 taskkill.exe/im process.exe를 실행하는 것입니다. 어떻게 든 죽은 프로세스로 하여금 formClose/FormDestroy를 실행하게 만듭니다. 어떻게 작동합니까? WM_CLOSE를 보내면됩니까?

+0

따라서 단일 서비스와 데스크톱 앱 간에는 IPC가 없습니다. 파이프/소켓/맵핑을 통해 링크 된 경우 또는 서비스가 클라이언트와 직접 대화 할 수있는 경우 중지 이벤트 중에 자체를 종료하도록 지시 할 수 있습니다. –

+1

* 표시 * : 그렇게하려면 : http://serverfault.com/a/151788 –

+0

IPC를 구현하고 프로세스에 묻습니다. –

답변

0

최상의 솔루션은 간단한 IPC입니다. 이 경우 IInspectable이 이미 제안 했으므로 실제로 필요한 것은 전역 수동 재설정 이벤트 개체뿐입니다.

그러나 올바른 방법으로 처리 할 수없는 경우 다른 자식 프로세스를 시작하여 닫을 응용 프로그램에 창 메시지를 보낼 수 있습니다.