2010-08-19 3 views
0

안녕하세요. 저는 Windows 서비스를 만들고 설치하는 것과 관련하여 온라인 자습서를 몇 번 따라 왔으며 계속 바인드에 들어간 것으로 보입니다. 나는 자습서 here을 따른다. 그리고 그것이 작동하고있는 것처럼 보인 동안, 그 100 %가 아니라.Windows 서비스 구현에 얽매임

이 SuperService가 시작 : 나는 다음과 같은 두 가지 이벤트를 보여줍니다 서비스를 시작한 후 이벤트 뷰어를 검사 할 때 지금

namespace SuperService 
{ 
partial class Logger : ServiceBase 
{ 
    public Logger() 
    { 
     InitializeComponent(); 
    } 

    void timer1_Tick(object sender, EventArgs e) 
    { 
     LogEvent("This Timer has been ticked!", EventLogEntryType.Information); 
    } 

    protected override void OnStart(string[] args) 
    { 
     timer1.Tick += new EventHandler(timer1_Tick); 
     timer1.Start(); 
     LogEvent("This SuperService has started!", EventLogEntryType.Information); 
    } 

    protected override void OnStop() 
    { 
     LogEvent("This SuperService has stopped.", EventLogEntryType.Information); 
    } 

    protected override void OnPause() 
    { 
     base.OnPause(); 
     timer1.Stop(); 
    } 

    protected override void OnContinue() 
    { 
     base.OnContinue(); 
     timer1.Start(); 
    } 

    static void LogEvent(String Message, EventLogEntryType type) 
    { 
     String source = "Logger"; 
     String log = "Application"; 
     if (!EventLog.SourceExists(source)) 
     { 
      EventLog.CreateEventSource(source, log); 
     } 

     EventLog eLog = new EventLog(); 
     eLog.Source = source; 

     eLog.WriteEntry(Message, type); 
    } 
} 
} 

:이 사용하여 코드 메신저입니다!

서비스가 시작되었습니다.

그래서 나는 다소 잘 작동하지 않는 것 같습니다. timer1_Tick에 의해 트리거되는 이벤트는 보이지 않습니다. 누구나 왜 올바른 방향으로 나를 가리킬 수 있는지 알고 있습니까? 미리 감사드립니다.

+0

타이머의 간격은 얼마입니까? 0이 아닌지 확인하십시오. –

+0

타이머의 간격은 어디에 설정되어 있습니까? 어쩌면 디자이너일까요? 그리고 그 가치는 무엇입니까? –

+0

은 60000이고 활성화 된 값은 –

답변

1

System.Windows.Forms.Timer 대신 System.Threading.Timer를 사용합니까? 당신이 사용자의 의견 같은 문제가 발생하고 자세한 내용은 성공

으로이 System.Threading.Timer로 전환이 사용하는 튜토리얼 링크 (귀하의 링크에서 가져온) : Problem with System.Timers.Timer not firing in a Windows service합니다.

+0

당신이 옳았 던 것처럼 나는 의심했습니다. 나는 코드를 바꿨고 지금은 작동한다. 감사! –

1

제쳐두고 windows 서비스는 topshelf으로 훨씬 쉽습니다. 콘솔 앱/POCO로 서비스를 작성할 수있는 오픈 소스 프로젝트이지만 모든 접착제를 추상화하는 "서비스 컨테이너"에서 설치/제거/디버그 지원을 선택하십시오.

myservice         (to run as console app for debugging) 
myservice /install 
myservice /uninstall 
myservice /instance:{instance_name} 
0

편집 : 다음은 내가 작성한 바로 ​​그 내용을 다루는 SO 응답입니다.


Windows Service Stops Automatically

나는이 서비스를 할 수 없다 "생각"하는 경우 Windows에서 서비스를 중지 것으로 판단된다. 나는 이것을 수행하는 정확한 "기본"API를 기억할 수 없다. 나는 그것으로 몇 년 뒤 싸웠다.


이벤트 로그에 "myservice 할 작업이 없습니다. 종료 중입니다."라는 메시지가 있습니다. 또는 그 구두를 전달하는 그런 메시지?

+0

내 게시물에서 언급 한 두 가지 –