Problem mit dem Ausführen meines Programmes als Dienst
-
Hi ich möchte mein Programm als Dienst laufen lassen.
Dazu habe ich mir von CodeGuru folgende Source geholt und bereits modifiziert:#include <windows.h> char service_name[]="Service1", display_name[]="Mein Service"; SERVICE_STATUS m_ServiceStatus; SERVICE_STATUS_HANDLE m_ServiceStatusHandle; BOOL bRunning=true; void WINAPI ServiceMain(DWORD argc, LPTSTR *argv); void WINAPI ServiceCtrlHandler(DWORD Opcode); BOOL InstallService(); BOOL DeleteService(); int main(int argc, char* argv[]) { if(strcmp(argv[1],"-i")==0) //-i ist der Parameter um den Service zu { //installieren if(InstallService()) return 1; else return -1; } if(strcmp(argv[1],"-d")==0) //-d um ihn zu deinstallieren { if(DeleteService()) return 2; else return -2; } SERVICE_TABLE_ENTRY DispatchTable[]={{service_name,(LPSERVICE_MAIN_FUNCTION)ServiceMain}, {NULL,NULL}}; StartServiceCtrlDispatcher( DispatchTable); return 0; } void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) { DWORD status; DWORD specificError; m_ServiceStatus.dwServiceType = SERVICE_WIN32; m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING; m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; m_ServiceStatus.dwWin32ExitCode = 0; m_ServiceStatus.dwServiceSpecificExitCode = 0; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; m_ServiceStatusHandle = RegisterServiceCtrlHandler(service_name,ServiceCtrlHandler); if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0) return; m_ServiceStatus.dwCurrentState = SERVICE_RUNNING; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus)) { } bRunning=true; while(bRunning) { Sleep(3000); //insert code here } return; } void WINAPI ServiceCtrlHandler(DWORD Opcode) { switch(Opcode) { case SERVICE_CONTROL_PAUSE: m_ServiceStatus.dwCurrentState = SERVICE_PAUSED; break; case SERVICE_CONTROL_CONTINUE: m_ServiceStatus.dwCurrentState = SERVICE_RUNNING; break; case SERVICE_CONTROL_STOP: m_ServiceStatus.dwWin32ExitCode = 0; m_ServiceStatus.dwCurrentState = SERVICE_STOPPED; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus); bRunning=false; break; case SERVICE_CONTROL_INTERROGATE: break; } return; } BOOL InstallService() { char strDir[MAX_PATH]; HANDLE schSCManager,schService; GetCurrentDirectory(MAX_PATH,strDir); //Erstmal holen wir uns den Dateinamen strcat(strDir,"\\Srv1.exe"); //der exe //öffnen des Servicemanagers. Wird für jeden Zugriff gebraucht schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (schSCManager == NULL) return false; schService = CreateService(schSCManager, service_name, // serivce name display_name, // service name to display SERVICE_ALL_ACCESS, // desired access SERVICE_WIN32_OWN_PROCESS, // service type SERVICE_AUTO_START, // start type SERVICE_ERROR_NORMAL, // error control type strDir, // path to exe-file NULL, // no load ordering group NULL, // no tag identifier NULL, // no dependencies NULL, // LocalSystem account NULL); // no password if (schService == NULL) return false; CloseServiceHandle(schService); return true; } BOOL DeleteService() { HANDLE schSCManager; SC_HANDLE hService; SERVICE_STATUS status; schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (schSCManager == NULL)return false; hService=OpenService(schSCManager,service_name,SERVICE_ALL_ACCESS); if (hService == NULL)return false; if(QueryServiceStatus(hService,&status)==0) return false; if(status.dwCurrentState!=SERVICE_STOPPED) if(ControlService(hService,SERVICE_CONTROL_STOP,&status)==0) return false; if(DeleteService(hService)==0) return false; if(CloseServiceHandle(hService)==0) return false; else return true; }Der Dienst wird auch offensichtlich korrekt installiert. Nach dem Starten des Dienstes wird die exe im Taskmanager angezeigt allerdings wird mein eingefügter Quelltext nicht ausgeführt.
Habe schon alles mögliche ausprobiert aber ich finde den Fehler einfach nicht.
Hoffe, dass ihr mir da helfen könnt den Fehler zu finden.Danke schon mal für jegliche Hilfe.
Gruß
rean