Normalerwese schickt Windows die Timernachrichten (WM_TIMER) an ein Fenster. Und da ein Dienst in der Regel kein Fenster hat, funktioniert das natürlich nicht.
Nutzt du die
API Funktion
SetTimer direkt, kannst du eine Funktion angeben. Eventuell funktioniert das ohne Fenster.