Обычно это результат одной из двух вещей: либо (а) ваш метод OnStart()
вызывает исключение, либо (б) метод OnStart()
не запускает поток для выполнения работы.
Если проблема в (а), то очевидным решением является отладка службы, чтобы определить, что идет не так. Как минимум, поместите блок try-catch
вокруг содержимого метода OnStart()
и зарегистрируйте ошибку в журнале системных событий при возникновении исключения. Затем вы можете увидеть детали в средстве просмотра событий Windows.
Если проблема в (b), то вам нужно создать поток, который действительно что-то делает. Поток должен быть потоком переднего плана (в отличие от фонового потока), чтобы предотвратить остановку службы. Типичный OnStart()
метод выглядит следующим образом:
private System.Threading.Thread _thread;
protected override void OnStart(string[] args)
{
try
{
// Uncomment this line to debug...
//System.Diagnostics.Debugger.Break();
// Create the thread object that will do the service's work.
_thread = new System.Threading.Thread(DoWork);
// Start the thread.
_thread.Start();
// Log an event to indicate successful start.
EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);
}
catch (Exception ex)
{
// Log the exception.
EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
}
}
private void DoWork()
{
// Do the service work here...
}