programm als service starten
-
Hallo,
ich habe probiert ein fremdes Programm als Service zu starten.
Dazu habe ich folgenden Code geschrieben:
void InstallService(char* szBinPath) { SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if(hSCManager != 0) { SC_HANDLE hSCService = CreateService( hSCManager, "servicetest",//ServiceName "servicetest",//DisplayName SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_MODIFY_BOOT_CONFIG | SC_MANAGER_QUERY_LOCK_STATUS | STANDARD_RIGHTS_READ, //Desired Access SERVICE_WIN32_OWN_PROCESS, //ServiceType SERVICE_AUTO_START, //StartType SERVICE_ERROR_NORMAL, //Error control szBinPath, //binary path NULL, NULL, NULL, NULL, NULL); if(hSCService) { printf("Service erfolgreich erstellt!\n"); CloseServiceHandle (hSCService); }else { printf("Service konnte nicht erstellt werden! Error: %d\n", GetLastError()); } CloseServiceHandle (hSCManager); }else { printf("OpenSCManager failed!\n"); } }Es sieht für mich auch so aus als ob der Service richtig 'installiert' wird, allerdings kann er nicht gestartet werden.
Deshalb habe ich mir mal angeschaut was dazu in der Ereignisanzeige zu finden ist.
Dort steht folgendes:Der Dienst "servicetest" wurde aufgrund folgenden Fehlers nicht gestartet:
Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.Jetzt frage ich mich, ob ich in dem Programm, welches als Service gestartet werden soll noch irgendetwas in der art von einem 'Messagehandler' brauche.
Brauche ich dies?
-
Hi
Das ist normal da dein program ja auch kein dienst ist. !
Wen du dies denoch möchtes musst du in deinem program abfragen ob das program zmb. Mit dem parm. -s gestartet worden ist. Danach sich selber nochmal starten und dan beenden. Dies geschiet alles vor dem timeout, und somit kannst du es umgehen, das du nicht extra ein dienst schreiben musst.Dazu musst du einfach den szbinpath anpassen un am schluss des strings mit einem von dir gewünschten parameter versehen, einfach so das du am anfang des programstarts auf den parameter prüfen kannst.
Bsp.
"C:\bin.exe -s"
Lowbyte