Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2740 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2072199
nibbles1
Pour la gloire de NFT
Posté le 27-04-2011 à 14:39:55  profilanswer
 

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
mood
Publicité
Posté le 27-04-2011 à 14:39:55  profilanswer
 

n°2072214
nibbles1
Pour la gloire de NFT
Posté le 27-04-2011 à 16:20:02  profilanswer
 

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
n°2073418
nibbles1
Pour la gloire de NFT
Posté le 03-05-2011 à 09:45:11  profilanswer
 

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
n°2073435
gilou
Modérateur
Modzilla
Posté le 03-05-2011 à 10:08:07  profilanswer
 

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é!  --
n°2073452
nibbles1
Pour la gloire de NFT
Posté le 03-05-2011 à 10:49:22  profilanswer
 

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

n°2073468
gilou
Modérateur
Modzilla
Posté le 03-05-2011 à 11:22:02  profilanswer
 

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é!  --
n°2073471
nibbles1
Pour la gloire de NFT
Posté le 03-05-2011 à 11:24:17  profilanswer
 

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).

n°2073526
gilou
Modérateur
Modzilla
Posté le 03-05-2011 à 14:55:42  profilanswer
 

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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[C++] Manipuler un logiciel de simulationProbleme en Programmation C :(
Exception code in C ???[C] pointeurs de pointeurs [RESOLU]
comment utiliser la bibliothèque Faxcom ? VBA & C++Code C-Lecture de fichiers à partir d'un dossier.
Visual C++ dependances supplémentairesCreation d'une appli Web a partir du code C# Winforms
[ORACLE 10g] Acceder a Oracle 10g depuis Toad ou Tora sur Windows 7 
Plus de sujets relatifs à : [C++] Accéder à un service Windows (message personnalisé)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR