Moin oOo,
im Prinzip sollte sich jede Anwendung auch beenden lassen.
Sei es durch ein WM_CLOSE, wie Du es ja machst, oder, ggf., mittels WM_QUERYENDSESSION, um dem Programm ein Beendigen der Windows-Session vorzugaukeln, was es dann dazu veranlassen sollte sich zu beenden.
Bei Diensten musst Du sie halt über die entsprechenden
API-Funktionen (als Einstieg:
OpenSCManager) stoppen.
Was ich prinzipiell vermeiden würde ist TerminateProcess, da der Prozess dann keine Möglichkeit mehr hat aufzuräumen.