1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| SERVICE_STATUS OpenServStatus;
SC_HANDLE schandle;
SC_HANDLE serviceConcerne;
int timeOutArret = 10; // * --- Durée en seconde
// * --- Ouverture du gestionnaire de service
schandle=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(schandle != NULL)
{
// * --- Ouverture du service à contrôler
serviceConcerne = OpenService(schandle,
"NomDuService",
SERVICE_QUERY_STATUS|SERVICE_START|SERVICE_STOP);
if(serviceConcerne != NULL)
{
// * --- Vérfication de l'état du service
QueryServiceStatus(serviceConcerne, &OpenServStatus);
if(OpenServStatus.dwCurrentState == SERVICE_RUNNING)
{
// * --- Demande d'arrêt du service
if (ControlService(serviceConcerne, SERVICE_CONTROL_STOP, &OpenServStatus))
{
Sleep(1000);
while(QueryServiceStatus(serviceConcerne, &OpenServStatus))
{
if (OpenServStatus.dwCurrentState == SERVICE_STOP_PENDING)
{
Sleep(1000);
// * --- TimeOut permettant de détecter un problème de fermeture
// * --- du service, ainsi l'aplication n'est pas bloquée.
timeOutArret--;
if(timeOutArret == 0)
{
MessageBox( NULL, "Problème lors de l'arrêt du service",
"Information", 0);
break;
}
}
else break;
}
}
}
if ((OpenServStatus.dwCurrentState == SERVICE_STOPPED))
{
// * --- On demarre le service
StartService(serviceConcerne,NULL,NULL);
etatIcone = 1;
}
CloseServiceHandle(serviceConcerne);
}
CloseServiceHandle(schandle);
}
else
{
// * --- Message si on ne peut accéder au gestionnaire de service de l'OS
MessageBox( NULL, "Ouverture du gestionnaire de service non autorisée",
"Information", 0);
} |
Partager