Debugging services is hard. These days I prefer to write a class library that does all the work, a service that just calls one method of the class library, and a test harness (usually a console app) that calls the same method. That way I can run the test harness in the debugger and get most of the errors out of the way.
The two messages you tend to get when your service won't start are the one you just got and the "it started but then stopped" one, which usually means it threw an exception. Yours usually implies a bad loop or an overly long sleep if you're writing a "wake up and see if it's midnight yet" kind of service. But really, running it under the debugger from a test harness is the best way to gain insight into what's happening.