Kontrollieren, ob Dienst aktiviert ist
-
allo,
ich möchte von meinem Programm aus kontrollieren, ob der Dienst "Smartcard" (scardsvr.exe) gestartet ist. Wenn nicht, soll nur eine Meldung kommen.
Ich hab die Beispiele aus der MSDN genommen. Bei OpenService() kommt aber immer der Fehler 1060 ERROR_SERVICE_DOES_NOT_EXIST.
Ich hab als Service Name jeweils den Namen "Smartcard" und "scardsvr.exe" probiert.Was hab ich denn falsch gemacht? (Dienst ist gestartet)
Hier der Code..
//TCHAR szSvcName[]=_T("scardsvr.exe"); TCHAR szSvcName[]=_T("Smardcard"); char error[100]; SC_HANDLE schSCManager; SC_HANDLE schService; bool ret=false; SERVICE_STATUS_PROCESS ssp; DWORD dwStartTime = GetTickCount(); DWORD dwBytesNeeded; DWORD dwTimeout = 30000; // 30-second time-out // Get a handle to the SCM database. schSCManager = OpenSCManager( NULL, // local computer NULL, // ServicesActive database SC_MANAGER_ALL_ACCESS); // full access rights if (NULL == schSCManager) { printf("OpenSCManager failed (%d)\n", GetLastError()); ret = false; } // Get a handle to the service. schService = OpenService( schSCManager, // SCM database szSvcName, // name of service /*SERVICE_STOP | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS*/ SC_MANAGER_ENUMERATE_SERVICE); if (schService == NULL) { //1060: ERROR_SERVICE_DOES_NOT_EXIST sprintf(error, "OpenService failed (%d)\n", GetLastError()); CloseServiceHandle(schSCManager); ret = false; } if ( !QueryServiceStatusEx( schService, SC_STATUS_PROCESS_INFO, (LPBYTE)&ssp, sizeof(SERVICE_STATUS_PROCESS), &dwBytesNeeded ) ) { printf("QueryServiceStatusEx failed (%d)\n", GetLastError()); goto stop_cleanup; } if ( ssp.dwCurrentState == SERVICE_RUNNING ) { printf("Service is running.\n"); ret= true; } stop_cleanup: CloseServiceHandle(schService); CloseServiceHandle(schSCManager); return ret; }Micha
-
Dann stimmt wohl der Servivename nicht.
Es gehtum den internen Namen, nicht den benutzerfreundlichen Namen.Schau mal unter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services
nach ob der dort wirlich drin ist.
-
Martin, vielen dank.
der Name ist "SCardSvr". jetzt funktioniert esMicha