Je débute avec une création d'un service

Résolu
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014 - 14 mars 2009 à 15:43
 Cirec - 16 mars 2009 à 07:59
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

tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 17:53
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
3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 18:01
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;
3
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 18:15
merci bien à vous , je vais tester et voir ,
                                         merci bien , a+
3
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 18:20
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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 18:29
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;
3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 16:57
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 !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 18:09
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 !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 18:22
Montre ton code ...

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 18:32
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 !
0
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 18:51
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)
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 18:57
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 !
0
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 19:18
merci bien ami, les choses sont plus claire mainant , alors peut tu me donner le syntaxe de Createservice et comment je l'utilise ....
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 19:24
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 !
0
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 19:37
merci bien bacterius , je vais le voir.
0
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 19:48
mais svp les fonction "OpenSCManager" et  "OpenService" et "ControlService" , c quoi sont role ?
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 19:54
- 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 !
0
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 20:02
merci cher ami c tres intérréssant , ce soir beaucoup c claireté et c grace à vous , merci bien .
0
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 20:09
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?
0
tomylibre Messages postés 37 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 4 juillet 2014
14 mars 2009 à 20:12
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>
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 20:14
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 !
0
Rejoignez-nous