2012-06-04 3 views
1

프로덕션 서버에서 스레드를 생성하고 작업을 실행하는 Winforms C# 응용 프로그램을 만들었습니다. 서비스를 구성하고 실행하기 위해 GUI가 필요하기 때문에 winforms 응용 프로그램에서 작업을 만들었습니다.winforms 응용 프로그램에서 Windows 서비스를 실행하는 방법은 무엇입니까?

최근에 서버가 변경되어 특정 유휴 시간이 지나면 로그 오프되어 응용 프로그램이 종료되므로 로그 아웃 할 때도 계속 Windows 서비스를 실행해야합니다. 문제는 GUI가 필요하다는 것입니다.

GUI 인터페이스를 사용하여 Windows 서비스를 만드는 가장 좋은 방법은 무엇입니까? 당신이 작성하는 경우

+1

[프로세스 간 통신] (http://stackoverflow.com/questions/56121/ipc-mechanisms-in-c) - 샤프 - 사용 및 베스트 프랙티스). –

+0

@ ta.speot.is가 맞으면 응용 프로그램을 GUI 부분과 로그 아웃 할 때 GUI없이 실행해야하는 서비스 부분으로 분할해야 할 것입니다. 프로세스 간 통신을 통해 이러한 프로세스간에 통신 할 수 있습니다. – kenny

+0

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? WCF? 이보다 쉬운 솔루션 또는 타사 소프트웨어가 있습니까? – Eitan

답변

0

실제 Windows Services

중지하고 서비스에서 데이터를 필요한 경우 the ServiceController class

편집

, 당신은 WCF를 사용할 수 있습니다 사용하여 서비스에 대한 정보를 얻을 시작할 수 있습니다

또는 서비스와 통신하기위한 소켓. 또 다른 옵션은 잘 알려진 폴더에있는 파일에 서비스 결과를 게시하는 것입니다.

0

사용자 세션 (= Interactive Windows service)에서 Windows 서비스를 생성하는 것은 좋은 생각이 아니며 악용으로 간주됩니다. 나는이 프로젝트를 GUI와 서비스 파트로 나누어서이 문제를 해결했다. WCF를 통해 통신합니다. 또 다른 가능성은 Memory-Mapped files입니다.

0

간단한 프로세스 간의 대화를 원하면 NamedPipeServerStreamNamedPipeClientStream을 사용할 수도 있습니다. 이 기술은 오래되었지만 영리하지는 않지만 사용하기 쉽습니다 (C#의 스트림 관리를 알고있는 경우).

유일한 단점은 Object out-of-the-box를 말하는 것이 아니라는 것입니다. 하지만 그 목적을 위해 XML Serialization을 사용합니다. 송신자 측에

  • : 개체 => XML 문자열 => 바이트 [] 수신 측에
  • :

개체 => 바이트 [] => XML 문자열은 그것을 간단하게 I를 유지하려면 항상 응용 프로그램의 void main (String [] args)에서와 같이 수신자 측에서 구문 분석하는 String [] 객체를 사용하십시오.

서비스를 사용하면 CustomCommands을 사용할 수도 있지만이 서비스는 스폰 매개 변수를 지정하지 않은 메소드. 서비스에 액세스 할 수있는 매개 변수 (예 : XML 파일)를 저장하는 경우를 제외하고

관련 문제