IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

je débute avec un service windows en delphi 7 et je peu pas le démarer


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut je débute avec un service windows en delphi 7 et je peu pas le démarer
    salut à tous, je programme un service windows avec Delphi entreprise 7 , avec un Tservice , hier g avancer un peut avec un ami dans ce forum a faire la connection au SCM et à ouvrir la connection avec mon service et à le créer , et tous ca marche bien , tous ces fonction me renvoi un nombre >0 et meme dans les service de windows , je vois mon service appelé AAAservice , mais quand je fait StartService pour le démarer , je vois qui essaye de démarre , il m'affiche démarage dans le console des service de windows mais apres se stop , voila les ligne de code que j'utilisie pour le démare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //demarer le service
        ArrayOfArguments:=nil;
        if  StartService(Srv_Hwnd ,0,ArrayOfArguments)then
         showmessage (' démarage de service avec succe ')
         else
         showmessage (' erreur est survenu en démarage de service');
       //fin de démarage
    j'attend votre aide et merci

  2. #2
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut meme sujet
    donc le serice m'afficher le 2eme message :
    'erreur est survenu en démarage de service'
    je ne sais pas quoi faire , ca fait une semaine que chui coincé

  3. #3
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    et bienvenue sur le forum

    que fait le service ?
    peux-tu montrer le code de la methode execute du service ?

  4. #4
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut merci bien pour ta réponse
    pour le moment mon service ne fait rien , juste des showmessage pour savoir si il ya un erreur dans quel parti , voila le code de la procedure OnCreate(les autres procedure sont vide ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    procedure TAAAservice.ServiceCreate(Sender: TObject);
       var
         S : LongBool ;
         T : Cardinal ;
        Srv_Hwnd : SC_Handle;
        Srv_CtrlMngr: SC_Handle;
        Srv_State : TServiceStatus;
        //voir etat de service
         EtatDuService : word;
         //voir démarer service
          ArrayOfArguments : PChar;
     
        begin
         while not terminated do
         begin
     
                                //////////////////////
        //connection SCM windows
        Srv_CtrlMngr := OpenSCManager(nil,nil, SC_MANAGER_ALL_ACCESS);
        showmessage('connection au base SCM windows : '+inttostr(Srv_CtrlMngr));//cette fonction renvoi un nombre différent de 0 donc elle est juste
     
                                 ///////////////////
     
       //Creation de service en base de SCM windows ( ensuite on va faire un test avant lui si le service existe
        (*)T:=CreateService(Srv_Ctrlmngr,PChar('AAAservice'),PChar('AAAservice'),SC_MANAGER_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,PChar( 'C:\Program Files\Borland\Delphi7\Projects\anisservice1\project1.exe'),nil,nil,nil,nil,nil);
        if T>0 then
        showmessage('service crée')
        else
        showmessage('service existe ou bien un autre erreur'); (*)
     
                                    ////////////////////////
     
        //ouvrir le service
         Srv_Hwnd := OpenService(Srv_CtrlMngr, PChar('AAAservice'),SERVICE_ALL_ACCESS  );
         showmessage('ouvertur d''un service : '+inttostr(Srv_Hwnd)) ;//si ca affiche un 0 donc pas juste
     
     
     
                                  //////////////////////
     
     
        //demarer le service
        ArrayOfArguments:=nil;
         if StartService(Srv_Hwnd ,0,ArrayOfArguments)then
         showmessage (' démarage de service avec succe ')
         else
         showmessage (' erreur est survenu en démarage de service');
         //fin de démarage
     
                                     //////////////////////
     
     
     
        // etat de service
     
        QueryServiceStatus(Srv_Hwnd, Srv_State);
        EtatDuService:=Srv_State.dwCurrentState;
     
         case  EtatDuService of
          SERVICE_CONTINUE_PENDING : showmessage('1');
          SERVICE_PAUSE_PENDING : showmessage('le service est en train d''être relancé après une opération pause');
          SERVICE_PAUSED : showmessage('Le service est en pause');
          SERVICE_RUNNING : showmessage('Le service est démarré ');
          SERVICE_START_PENDING : showmessage('Le service est en cours de démarrage');
          SERVICE_STOP_PENDING : showmessage('Le service est en cours d''arrêt');
          SERVICE_STOPPED: showmessage('Le service est stoppé');
     
          else
          showmessage('Etat du service ne retourne rien');
          end;
     
       //fin d'etat de service
     
                                   ////////////////////
    //fermer les handle
            CloseServiceHandle(Srv_Hwnd);
            CloseServiceHandle(Srv_CtrlMngr);
     
     
     
          AAAservice.Free;
          end ;
        end;
    merci encore

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 735
    Points : 807
    Points
    807
    Par défaut
    tu peux tester ces composants qui te permettrons de debugger un service facilement

    http://www.aldyn-software.com/svcom.html

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 735
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par tomy_libre Voir le message
    pour le moment mon service ne fait rien
    Dans ce cas le mieux est peut être de faire un LogMessage qui te permettra de logger quelques dans le gestionnaire d'évènement windows.

  7. #7
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut merci bien
    dsl mais j'ai pas compri ce que tu veut dire exactement, ce sont des compilateur de service ou quoi !!!, en plus mon code de démarage de service et normallement juste , je suis coincé depuis 1 semaine dans cette truc, et si la solution est vraimant de tester mon service dans ce site, svp , j'aime bien que tu m'explique un peut comment !!



    cordiallement

  8. #8
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    merci VLDS mais c quoi les logMessage !!

    g installer le SvCom, mais je ne sais pas comment l'utiliser !!!!

    ou bien , comment afficher l'erreur qui est survenue au niveau de StartService , un show box ou bien une boucle CASE , qui a une idée svp

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 735
    Points : 807
    Points
    807
    Par défaut
    regarde un peu ici

    http://216.101.185.148/scripts/isapi...rticle=5634930

    sinon recherche sur www.tamaracka.com avec les mots clés suivants (service logmessage)

    Re: Write to the Event Log? Jan Doggen 63
    borland.public.delphi.language.delphi.win32 1/26/2005 9:40:05 AM 522

    pour SVCOM c'est exactement comme un service de base Delphi sauf que tu peux débugger (Fichiers -> Nouveau... tu as peux être un nouvel onglet SVCom, je ne me souviens plus exactement)

    http://www.aldyn-software.com/examples.html

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 126
    Points
    13 126
    Par défaut
    Je ne comprend pas bien pourquoi tu veux passer par le Service Manager

    En plus tu entres dans une boucle sans fin dans la création du service alors qu'elle devrait se trouver dans OnExecute.

    Les éventuelles initialisations dans OnStart. etc.

  11. #11
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    pour le moment je veut juste faire le démarag de mon service , le boucle infini n'a aucune importance mainant , d'hailleur mon programme n'arrive pas au 2eme cycle de boucle, le service ne démare pas , pour le OnExecute j'ai mis qq instruction sans valeur car je veut pour le moment bien maitriser à commander mon service : start , stop , pause , continue,

    en plus je croit que en OnStart je met les instruction apres le démarage de mon service , ce qui est normallement fait au niveau de OnCreate .

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Il y a quelques problèmes dans l'implémentation que tu as faite.

    Déjà les boucles de type "while Terminated" doivent se trouver dans le OnExecute. OnStart n'est là que pour faire les initialisations générales du service.

    Ensuite tu fais quelque chose d'illogique, pourquoi récupérer le handle du service AAAservice puis le démarrer à la main alors que tu es déjà à l'intérieur de AAAservice. OnStart ne signifie pas "démarre le service" mais "le service a démarré".
    Ces API ne sont pas à placer à l'intérieur du service lui-même, elles sont pour là pour permettre à un programme externe de piloter le service.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 126
    Points
    13 126
    Par défaut
    le boucle infini n'a aucune importance mainant
    Bien. Alors partons d'un projet vierge . Fichier/Nouveau/autres > Application services.

    Ok ?

    Delphi t'a créé un nouveau projet avec une "fiche" de type TService.
    La seule chose que tu as à faire actuellement est gérer l'événement OnExecute. Tu ajoutes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TTonService.ServiceExecute(Sender: TService);
    begin
      while not Terminated do
        ServiceThread.ProcessRequests(True); //attend l'ordre de fermeture
    end;
    Voilà terminé

    Plus qu'à l'enregistrer dans la liste des services:
    Compile et exécute-le avec le parmètre /INSTALL.

    Tu devrais voir apparaitre le message: Service installé avec succès.

    Il ne te reste plus qu'à le démarrer par le panneau de configuration > Outil d'administration > Services ou redémarrer l'ordinateur (Auto par défaut) et tu verras ton service Démarrer.

    Note que le nom du service est le DisplayName défini dans cette fameuse "Form".

  14. #14
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    merci bien pour vos réponse chers amis, je test et je re


    dsl , mais comment faire le /INSTALL !!!

    quand je fait : démarrer--->exécuter---->Project2.exe/install
    il me dit qu'il a pas trouvé le fichier Project2.exe

  15. #15
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Il faut ouvrir la ligne de commande puis naviguer jusqu'au répertoire où se trouve ton service puis exécuter Project2.exe /install
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 126
    Points
    13 126
    Par défaut
    Ou dans Delphi, menu Executer\Paramètres et dans le champ Paramètres... /INSTALL. Puis F9.

  17. #17
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    il me dit que un erreur est survenue, c à cause du nom de compte ou mot de passe ou qq choses comme ca ..
    quoi faire stp

  18. #18
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 126
    Points
    13 126
    Par défaut
    Tu dois avoir des droits administrateur pour installer un service.

  19. #19
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    je travail sur le compte administrateur , d'hailleur mon xp n'au qu'un seul compte , !!!!!

    il ya qq choses de bizard, lorsque g fait un CreateService , mon service est dans la liste des service windows, mainant g fait une autre form ayant un bouton que g mit toute mon code , mais g effacé la commande de OpenService.... , et maintenant l'état de service me renvoit le showmessage (''Le service est en cours de démarrage'), que veut dire cela !!!!quesque g fait exactement !!!!!

    Citation Envoyé par Andnotor Voir le message
    Bien. Alors partons d'un projet vierge . Fichier/Nouveau/autres > Application services.

    Ok ?

    Delphi t'a créé un nouveau projet avec une "fiche" de type TService.
    La seule chose que tu as à faire actuellement est gérer l'événement OnExecute. Tu ajoutes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TTonService.ServiceExecute(Sender: TService);
    begin
      while not Terminated do
        ServiceThread.ProcessRequests(True); //attend l'ordre de fermeture
    end;
    Voilà terminé

    Plus qu'à l'enregistrer dans la liste des services:
    Compile et exécute-le avec le parmètre /INSTALL.

    Tu devrais voir apparaitre le message: Service installé avec succès.

    Il ne te reste plus qu'à le démarrer par le panneau de configuration > Outil d'administration > Services ou redémarrer l'ordinateur (Auto par défaut) et tu verras ton service Démarrer.

    Note que le nom du service est le DisplayName défini dans cette fameuse "Form".


    Merci cher ami ca marche comme tu m'a dit , et je le démare manuellement et ca démare, mais mainant g fait une autre application que je désire piloter mon service alors j'ai voulu le stoper avec ces instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Srv_CtrlMngr := OpenSCManager(nil,nil, SC_MANAGER_ALL_ACCESS);
        showmessage('connection au base SCM windows : '+inttostr(Srv_CtrlMngr));
     
    Srv_Hwnd := OpenService(Srv_CtrlMngr, PChar('service2'),SERVICE_ALL_ACCESS  );
         showmessage('ouvertur d''un service : '+inttostr(Srv_Hwnd)) ;
     
     
     
     //stoper le service
        S :=ControlService(Srv_Hwnd, SERVICE_CONTROL_STOP, Srv_State);
     
        if S   then
         showmessage(booltostr(S))
          else
           showmessage('controlservice est false');
    et ca retourne le 2eme showmessage ,, c du à quoi !!!!
    CORDiALLEMENT , merci

  20. #20
    Membre du Club Avatar de tomy_libre
    Enseignant
    Inscrit en
    Mars 2009
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2009
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Merci bien les amis , toute est résolus , vraimant merci car g trouvé l'aide seulement dans ce forum tant que les autres me négulige


    aussi chers amis, je veut savoir quesqu'elle fait les commande suivant :
    # - SERVICE_CONTROL_INTERROGATE
    # - SERVICE_CONTROL_SHUTDOWN
    et aussi autre chose svp , je veut faire la commande de rédemarer le service , et je le trouve pas esqu'il fallait que je fait un STOP puis START à l'interieur de bouton RESTART ou quoi !!


    MERCI

Discussions similaires

  1. Imprimer avec un service Windows (ServiceAccount.LocalSystem)
    Par dkmix dans le forum Services Windows
    Réponses: 0
    Dernier message: 07/02/2011, 10h37
  2. Service Windows en Delphi
    Par philnext dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2009, 21h41
  3. problem avec un service windows
    Par Halloula dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/02/2009, 15h24
  4. Réponses: 2
    Dernier message: 26/05/2008, 11h03
  5. communiquer un IHM (asp.net ) avec un service windows
    Par nb_fr31 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 10/03/2008, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo