Ein Timer braucht eine MessageLoop und die hat ein Dienst in der Regel nicht. Willst du etwas periodisch machen, dann nimm eine Thread den du mit Sellep() entsprechen lange die Rechenzeit enziehst oder wenn es erst ab Windows 2000 laufen muss dann nimm
CreateTimerQueuTimer. Eine Headerübersetzung dazu findest du auf meiner Homepage.