2014-12-10 3 views
0

제 3 자 dde 서버와 통신하는 C++ DDE 클라이언트 (콘솔) 앱을 작성했습니다. 내 클라이언트와 서버가 같은 세션에있을 때 제대로 작동합니다. 그런 다음 클라이언트 코드를 SYSTEM으로 실행중인 win32 서비스로 이동했습니다. 다음을 시도해도 클라이언트 코드가 서버 목록을 가져올 수 없습니다. 1. Win7에서 "서비스와 데스크톱 상호 작용 허용"을 사용하려고했습니다. 2. 서버와 통신을 시도하는 스레드에서 사용자를 가장했습니다. 3 클라이언트 코드를 시스템으로 실행하려고했습니다.DDE 클라이언트가 사용자 세션에서 서버와 통신 중임

여러 세션에서 통신하는 주된 문제를 이해할 수 있습니다. 그러나 우아하게 달성 할 수있는 방법이 있습니까?

답변

0

세션 0 격리 때문에 Vista로 시작하여 "대화 형"서비스가 더 이상 작동하지 않습니다.

DDE는 User32 기반 기술 (내부적으로 창 메시지를 사용함)이므로 세션 경계를 넘어서 사용할 수 없습니다.

시도하려는 작업을 수행하려면 사용자 세션의 컨텍스트에서 실행되는 별도의 비 서비스 응용 프로그램을 만들어야하며 필요에 따라 DDE를 사용하고 세션에 독립적 인 IPC를 통해 서비스와 앞뒤로 통신해야합니다 메커니즘 (예 : 명명 된 파이프, 소켓 또는 COM 개체). 이 서비스는 WTSQueryUserToken()CreateProcessAsUser()을 사용하여 필요할 때 특정 사용자 세션 내에서 앱을 실행할 수 있습니다. 또는 사용자가 로그인 할 때 자동 실행되도록 앱을 구성 할 수 있습니다.

+0

이것은 정확히 내가하기로 결정한 것입니다. 그러나 나는 사용자 컨텍스트에서 별도의 프로세스를 생성하지 않고 나를 도울 수있는 내가 놓친 뭔가가 있는지 알아 내려고했습니다. – Sri

+0

DDE를 사용해야하는 경우에는 다른 방법이 없습니다. –