2015-09-03 4 views
0

Я пытаюсь использовать Topshelf Framework для создания службы Windows. Но когда я пытаюсь запустить службу, есть такое исключение:Topshelf TimeoutException

«Служба не удалось запустить ... System.Service.Process.TimeoutException: период ожидания истекло, и операция не была завершена»

Это мой код:

public class MyService : ServiceControl 
{ 

    private System.Timers.Timer _timer; 

    public void MyService() 
    { 
     _timer = new System.Timers.Timer(10); 
     _timer.AutoReset = false; 
     _timer.Elapsed += new ElapsedEventHandler(TimerOnElapsed); 
    } 

    private void TimerOnElapsed(object source, ElapsedEventArgs e) 
    { 
     //all the operation to do at the startup 
    } 

    public bool Start(HostControl hostControl) 
    { 
     _timer.Start(); 
     return true; 
    } 

    public bool Stop(HostControl hostControl) 
    { 
     _timer.Stop(); 
     return true; 
    } 

} 

Спасибо за любую помощь :)

ответ

1

есть несколько вопросов, я замечаю: текущий код будет затапливать таймер только один раз (у вас есть АВТОПЕРЕЗАПУСК = ложь)

с Topshelf, класс MyService должен выглядеть следующим образом:

using System.Timers; 
using Topshelf; 

namespace TopShelfTestService 
{ 
    public class MyService 
    { 
     private System.Timers.Timer _timer; 

     public MyService() 
     { 
      _timer = new System.Timers.Timer(10); 
      _timer.AutoReset = true; 
      _timer.Elapsed += new ElapsedEventHandler(TimerOnElapsed); 
     } 

     private void TimerOnElapsed(object source, ElapsedEventArgs e) 
     { 
      //all the operation to do at the startup 
     } 

     public bool Start(HostControl hostControl) 
     { 
      _timer.Start(); 
      return true; 
     } 

     public bool Stop(HostControl hostControl) 
     { 
      _timer.Stop(); 
      return true; 
     } 
    } 
} 

и приложение консоли/Program.cs будет выглядеть так:

using Topshelf; 

namespace TopShelfTestService 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      HostFactory.Run(x => 
      { 
       x.Service<MyService>(s => 
       { 
        s.ConstructUsing(name => new MyService()); 
        s.WhenStarted((tc, hostControl) => tc.Start(hostControl)); 
        s.WhenStopped((tc, hostControl) => tc.Stop(hostControl)); 
       }); 
       x.RunAsLocalSystem(); 

       x.SetDescription("Sample Topshelf Host");  //7 
       x.SetDisplayName("Test Service with TopShelf");      //8 
       x.SetServiceName("TopShelfTestService"); 
      }); 
     } 
    } 
} 
Смежные вопросы