Beichtpfarrer
Erfahrenes Mitglied
In der MSDN.
Is aber etwas kompliziert...
Ich geb dir mal ein Grundgerüst, nähere Infos zu den Funktionen bitte wirklich aus der MSDN holen.
Is aber etwas kompliziert...
Ich geb dir mal ein Grundgerüst, nähere Infos zu den Funktionen bitte wirklich aus der MSDN holen.
Code:
VOID WINAPI MeineErsteServiceMain(DWORD,char**);
int WINAPI WinMain(HINSTANCE,HINSTANCE,char*cmdl,int){
SERVICE_TABLE_ENTRY ste[2];
ste[0].lpServiceProc = MeineErsteServiceMain;
// ste nach deinen Wünschen initialisieren. der letzte (also der erste unbenutze) Eintrag muss komplett 0 sein
StartServiceCtrlDispatcher(ste); //service-dispatcher starten
//diese fkt setzt sich mit dem betriebssystem in verbindung.
//falls jetzt irgendwelche service aus deinem ste-table gestartet werden sollen, startet die das betriebssystem einfach
//dein prozess bleibt in der fkt hängen, solange mindestens einer der service noch läuft
}
SERVICE_STATUS_HANDLE ssh;
SERVICE_STATUS ss;
VOID WINAPI servicehandler(DWORD cmd){
if((cmd==SERVICE_CONTROL_STOP||cmd==SERVICE_CONTROL_SHUTDOWN)&&ss.dwCurrentState!=SERVICE_STOPPED){
//hier solltest du prozesskommunikation einfügen,
//damit du in deiner service-main weisst, dass du beenden sollst
ss.dwCurrentState=SERVICE_STOP_PENDING;
}
//sonstige commands evtl abfangen
SetServiceStatus(ssh,&ss);
}
VOID WINAPI MeineErsteServiceMain(DWORD service_argc,char**service_argv){
//hier solltest du ss nach deinen wünschen initialisieren
ss.dwCurrentState=SERVICE_START_PENDING;
ssh=RegisterServiceCtrlHandler(service_argv[0],servicehandler);
SetServiceStatus(ssh,&ss);
//hier den service initialisieren
ss.dwCurrentState=SERVICE_RUNNING;
SetServiceStatus(ssh,&ss);
//hier mit dem service arbeiten
//sobald service beendet werden soll, wird hier weitergemacht
ss.dwCurrentState=SERVICE_STOPPED;
SetServiceStatus(ssh,&ss);
}
Zuletzt bearbeitet: