2009-07-17 1 views
0

Windwows Service를 만들 때 등록해야하는 .exe 파일로 끝나고 "서비스"스냅인에서 시작합니다..Net 서비스 및 Windows 응용 프로그램을 동시에?

이 .exe 파일을 실행하려고하면 "명령 줄 또는 디버거에서 서비스를 시작할 수 없습니다. 먼저 Windows 서비스를 installutil.exe를 사용하여 설치 한 다음 ServerExplorer로 시작해야합니다. Windows 서비스 관리 도구 또는 NET START 명령. "

서비스에서 뭔가를 설정하여 일반 .exe로 실행하면이 메시지를 표시하는 대신 코드에서 제어 할 수있는 작업을 수행 할 수 있습니까? (Sub Main() 또는 그와 비슷한 것을 실행하는 것과 마찬가지로 서비스로 시작했을 때와는 다른 진입 점일 것임)

감사합니다!
Daniel

+0

"Sub Main()"에 대한 참조가 VB를 사용한다는 의미입니까? 그렇다면 질문 vb.net에 태그를 추가하는 것이 좋습니다. – CoderDennis

+0

나는 VB를 사용하고있다. 그러나 이것은 VB에만 국한된 것이라고는 생각하지 않는다. –

답변

4

음이 가능하지만 나는 아름다운 솔루션입니다 확실하지 않다 :

static void Main() 
{ 
    bool your_condition = ReadRegistry or ReadConfigurationFile; 
    if(your_condition) 
    { 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new YourService() 
     } 
     ServiceBase.Run(ServicesToRun); 
    } 
    else 
    { 
     Application.Run(new YourForm()) 
    } 
} 

내가 그것을 테스트하지 않았다 그러나 나는 그것이 작동 할 것이라고 생각한다.

#if DEBUG 
    Application.Run(new YourForm()) 
#else 
    ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] 
    { 
     new YourService() 
    } 
    ServiceBase.Run(ServicesToRun); 
#endif 

가 개발 중에 테스트하기 쉽고 디버깅의 그 방법 다음은 서비스로 빌드 배포를 수행

+0

훌륭합니다, 감사합니다! –

1

응용 프로그램을 별도의 클래스 라이브러리로 작성한 다음이를 실행하기 위해 스텁 exe를 만들 수 있습니까?

+0

네, 저도 생각했습니다. 적어도 2 개의 프로젝트가 분리되어 있음을 의미합니다. 내가 알아 내고 싶은 것은 하나의 프로젝트만을 사용하여이 문제를 해결할 수 있는지 여부입니다. –

+0

별도의 EXE가 실제로 여기로가는 길입니다. . . –

0

arg 값을 전달할 수 있습니다.

App.exe가 -UI 또는 App.exe가 - 서비스 같은

뭔가

2

우리는 프랜시스 B. 유사 우리 구축하지만, 조건부 컴파일을 사용하는 경향이있다.

실제로 독립형 exe 파일로 배포 할 것인지 또는 개발 및 테스트를 지원할 것인지 여부는 확실하지 않습니다.

참고로 디버그 버전에 "application.run()"블록이있을 필요가 없습니다. 폼이 보이지 않는다면 서비스의 OnStart 핸들러를 별도의 스레드에 생성하는 동안 무한 루프를 수행하는 코드 만 있으면됩니다.