[C++] Accéder à un service Windows (message personnalisé)

Accéder à un service Windows (message personnalisé) [C++] - C++ - Programmation

Marsh Posté le 27-04-2011 à 14:39:55    

Bonjour,
 
je dois envoyer des commandes personnalisées à un service maison.
 
Le service a été créé via  

Code :
  1. OpenSCManager(lpHostName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);


et

Code :
  1. hService = CreateService(hManager,
  2.                                      lpServiceName,
  3.                                      service.lpInfo->lpDisplayName,
  4.                                      SERVICE_USER_DEFINED_CONTROL,
  5.                                      service.lpInfo->dwServiceType, 
  6.                                      service.lpInfo->dwStartType,
  7.                                      service.lpInfo->dwErrorControl,
  8.                                      service.lpInfo->lpBinaryPathName,
  9.                                      service.lpInfo->lpLoadOrderGroup,
  10.                                      NULL,
  11.                                      service.lpInfo->lpDependencies,
  12.                                      service.lpInfo->lpServiceStartName,
  13.                                      service.lpInfo->lpPassword);


Quand je tente d'y accéder via  

Code :
  1.     SERVICE_STATUS        ServiceState;
  2.     m_hSCManager        = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  3.     m_hServiceUpdate    = NULL;
  4.     if (m_hSCManager) {
  5.         m_hServiceUpdate = OpenService(m_hSCManager, SERVICE_UPDATE_NAME, SERVICE_USER_DEFINED_CONTROL);
  6.         if (m_hServiceUpdate) {
  7.             if (ControlService(m_hServiceUpdate, 200, &ServiceState) == TRUE) {
  8.             } else {
  9.                 // erreur("ControlService failed (%d)n", GetLastError());
  10.             }
  11.         } else  {
  12.             // erreur ("OpenService failed (%d)n", GetLastError());
  13.             CloseServiceHandle(m_hSCManager);
  14.             m_hSCManager = NULL;
  15.         }
  16.     } else {
  17.         // erreur ("OpenSCManager failed (%d)n", GetLastError());
  18.     }


avec SERVICE_USER_DEFINED_CONTROL, j'obtiens une erreur 1064 (ERROR_EXCEPTION_IN_SERVICE).
avec SC_MANAGER_CONNECT ou SC_MANAGER_ALL_ACCESS, j'obtiens une erreur 5 (ERROR_ACCESS_DENIED).
 
Une idée pour communiquer avec ce service ?
Qu'est-ce qui ne va pas, la façon dont le service est créé ou l'accès par la suite ?
 
Merci pour votre aide. :hello:


Message édité par nibbles1 le 27-04-2011 à 14:41:21
Reply

Marsh Posté le 27-04-2011 à 14:39:55   

Reply

Marsh Posté le 27-04-2011 à 16:20:02    

Pour information, le service est lancé automatiquement par Windows, pas par le soft qui veut y accéder par la suite.


Message édité par nibbles1 le 29-04-2011 à 10:57:40
Reply

Marsh Posté le 03-05-2011 à 09:45:11    

Le message est bien reçu par le service, mais du côté du lanceur, on a pourtant false en retour de ControlService() et GetLastError retourne ERROR_EXCEPTION_IN_SERVICE.


Message édité par nibbles1 le 03-05-2011 à 10:49:47
Reply

Marsh Posté le 03-05-2011 à 10:08:07    

Ton lpServiceName, c'est la même chose que SERVICE_UPDATE_NAME?
Avec SERVICE_ALL_ACCESS ça donne quoi?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-05-2011 à 10:49:22    

Oui bien sûr, on parle bien du même service.
Avec des SERVICE_ALL_ACCESS autant que possible, ça ne fonctionne pas plus.

Reply

Marsh Posté le 03-05-2011 à 11:22:02    

Et ton service, son nom est dans la liste retournée avec EnumServicesStatusEx?  
A+,


Message édité par gilou le 03-05-2011 à 11:23:35

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-05-2011 à 11:24:17    

Je vais regarder.
En tout cas, j'arrive à communiquer avec (le message envoyé par l'appelant est bien reçu et tracé dans le service).
Un message stop réussit, pas un message personnalisé (128->255).

Reply

Marsh Posté le 03-05-2011 à 14:55:42    

Donc c'est au niveau de ControlService que ça va pas. Je pensais que c'était au niveau de OpenService, au vu de tes indications.
Donc a priori, c'est dans le code de ton service qu'il y a pb, non?
A+,


Message édité par gilou le 03-05-2011 à 15:09:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed