Je débute avec une création d'un service [Résolu]

Signaler
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014
-
 Cirec -
salut à tous, je vais poser ce question car g pas trouver vraimant une solution précise sur mon probleme, bon, je débute avec un service qui fait comme première étapes une connection à un BD mysql distant, et ca marché la connection , mais je veut faire un menu qui aide l'utilisateur de mon service à démarer, arreter , ou suspendre ce service , avec un icon de notification (tray icon), lorsque on clique au dessu un menu s'affiche ayyant les options : start , stop , pause. mes deux probleme c que je ne sais pas comment arreter mon service ou bien le suspendre , 2ement , j'ai pas trouver comment faire le "tray icon" , j'ai developper avec le VB ca été facile de le faire .
 j'attend votre aide , et merci d'avance .

45 réponses

Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

merci bien cher ami , wi je parle d'un service windows que je devais le crée ,mais je trouve pas de help pour le mot "winsvc" alors sache vous un emplacement ou je trouve une réponse,
                         encore merci cher ami
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Ajoute WinSvc dans ta clause unité :

uses Windows, Sysutils, Messages, Classes, ... , WinSvc;

Et ensuite, double-clique sur ta fiche, et écris "WinSvc.", puis attends un peu pour voir le contenu de l'unité. A partir de là tu auras plein de fonctions pour gérer les services Windows et même en créer un !
Et puis va sur MSDN pour te renseigner sur les fonctions ce ne sont pas les plus simples API ...

procedure TForm1.FormCreate(Sender: TObject);
begin
WinSvc.
end;
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

merci bien à vous , je vais tester et voir ,
                                         merci bien , a+
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

désolé , mais j'arrive pas à gérer mon service , pour expliquer j'ai fait un autre service , je clique au dessu et j'ajout winsvc dans uses , et puis, qui peut me donner quelque instructions pour arreter ce service que g créer mainant ,
                                                      Merci
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

en faite , je vais vous donner un ptit travaille que g fait , alors dis moi si je suis en bon chemin (mon service appelé "service1") mon service doit s'arreter avant d'afficher le dernier Message:

procedure TService1.ServiceCreate(Sender: TObject);

   var

    Srv_Hwnd : SC_Handle;

    Srv_CtrlMngr: SC_Handle;

    Srv_State : TServiceStatus;

    begin


    showmessage('le service démarre');


    winsvc.SERVICE_CONTROL_STOP ;

    //parti pour arreter le service


    Srv_CtrlMngr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

    showmessage(inttostr(Srv_CtrlMngr));//cette fonction renvoi un nombre différent de 0 donc elle est juste


    Srv_Hwnd := OpenService(Srv_CtrlMngr, PChar('service1'), SERVICE_ALL_ACCESS);

    showmessage(inttostr(Srv_Hwnd)) ;//ca affiche un 0


    if ControlService(Srv_Hwnd, SERVICE_CONTROL_SHUTDOWN, Srv_State)then

     showmessage('controlservice est true')

      else

       showmessage('controlservice est true');


       CloseServiceHandle(Srv_Hwnd);

       CloseServiceHandle(Srv_CtrlMngr);


    //maintenant le service doit s'arreter et n'affiche pas le message qui suit


    showmessage('le service est toujours en marche');


    end;
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Tu parles d'un service.
Tu entends par là un service Windows ? Dans ce cas-là regarde l'unité WinSvc, il y a tout ce qu'il faut.

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Oui, sinon j'avais vu une unité "SvcMgr", mais je n'arrive plus à l'utiliser, je crois qu'elle gère les applications services (une TApplication mais qui te fait démarrer directement en mode service, sans que tu aies à t'en préoccuper).

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Montre ton code ...

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Tu pouvais pas écrire plus petit ?

Concernant le code (met ses lorgnettes), si ton service "Service1" n'est pas créé, ça ne marchera pas.

Utilise CreateService.
Et ensuite ça marchera peut-être :/

Cordialement, Bacterius !
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

merci bacterius , mais lorsque je fait run pour mon service dans le programme delphi , cela ne ve pas dire que mon service est crée et en marche ??
(dsl pour la police de mon code , lol)
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Tu veux parler de Application.Run ?
Non, ceci déclenche uniquement le début de la boucle principale d'application.

Je t'explique en gros le principe des services Windows.
Il existe dans Windows un SCM (Service Control Manager), qui gère tous les services Windows.
Or, pour qu'une application soit considérée comme service, il faut qu'elle s'inscrive dans ce SCM. Après, elle est tranquille et peut effectuer ses opérations (sauf au début, ou c'est très délicat).

CreateService inscrit un service dans le SCM, et te permet de le paramétrer rapidement sans avoir à passer par les fonctions de paramètrage dédiées. C'est pourquoi il a autant de paramètres (mais ils sont simples, il ne faut pas être dérouté).

Cordialement, Bacterius !
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

merci bien ami, les choses sont plus claire mainant , alors peut tu me donner le syntaxe de Createservice et comment je l'utilise ....
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Rrah ... tu sais les paramètres sont affichés dans une bulle d'aide. De mémoire je ne pourrai pas te donner la syntaxe, mais tu peux chercher sur internet : regarde :

http://msdn.microsoft.com/en-us/library/ms682450(VS.85).aspx

Cordialement, Bacterius !
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

merci bien bacterius , je vais le voir.
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

mais svp les fonction "OpenSCManager" et  "OpenService" et "ControlService" , c quoi sont role ?
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
- OpenSCManager est très important, il permet d'établir la connexion avec le SCM. Il te suffit de spécifier une machine (nil si machine locale), un SCM (nil pour celui par défaut) et un type d'accès désiré (SC_MANAGER_ALL_ACCESS pour tous les droits). Il te renverra 0 si la fonction a foiré (dans ce cas ça ne sert plus à rien de continuer) ou le handle du SCM (tu devras t'en servir pour toutes les autres fonctions, donc garde-le dans une variable globale).

- OpenService permet d'établir la connexion avec un service enregistré dans un SCM défini par le handle de SCM que tu files à la fonction. Tu dois aussi spécifier le nom du service, et la fonction te renvoie le handle du service.

- ControlService envoie une commande à un service, donc le handle a été préalablement récupéré par CreateService ou OpenService.

C'est comme ça que je conçois les choses ...

Cordialement, Bacterius !
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

merci cher ami c tres intérréssant , ce soir beaucoup c claireté et c grace à vous , merci bien .
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

J'ai trouvé beaucoup de paramètre pour la fonction CreateService , esque je doit les citer tous ou bien qq 1 car vraimant c une liste de paramètre que je croit pas que les develeppeur vont les citer tous pour créer un service non?
Messages postés
36
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
4 juillet 2014

j'ai trouvé dans un site un createservice avec ces paramètre ,mais g pas compri 2 pramaètres "libelle" et un paramètre il a nommé "chemin" , et bain la voila tous :

<li>CreateService( H_SC,
</li><li> PChar( SrvName ),
</li><li> PChar( Libelle ),
</li><li> SC_MANAGER_ALL_ACCESS,
</li><li> SERVICE_WIN32_OWN_PROCESS,
</li><li> SERVICE_AUTO_START,
</li><li> SERVICE_ERROR_IGNORE,
</li><li> PChar( Chemin ),
</li><li>nil,
</li><li>nil,
</li><li>nil,
</li><li>nil,
</li><li>nil );
</li>
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Libellé représente le nom d'affichage du service, celui que tu verras dans les outils d'administration (genre "Onduleur"), le SvrName est le nom interne du service, qui est utilisé dans OpenService par exemple (genre "RPC32" pour l'appel de procédures distantes), et Chemin représente le chemin du service sur le disque (enfin l'executable). Voilà ...
Oublie pas que H_SC doit être le résultat d'un appel à OpenSCManager !

Cordialement, Bacterius !