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 :

Passer un paramètre dans un service


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2012
    Messages : 142
    Points : 80
    Points
    80
    Par défaut Passer un paramètre dans un service
    Bonjour a tous,

    Comment passer un paramétre dans un service lorsque qu'il démarre , c'est la première foie que j’utilise un service a la place d'une application

    J'ai tester ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TIdService.ServiceStart(Sender: TService; var Started: Boolean);
    var
      I: Integer;
    begin
      IdService.Interactive := True;
      for I := 1 to IdService.ParamCount do
       begin
         ShowMessage(IdService.Param[I]);
       end;
      Started := True;
    end;
    Installation du service "IdService.exe /install" Message 'Service installé avec succès.' OK

    Mais quand je démarre le service a l'invite de commande Windows "net start IdService Param1 Param2 Param3" le service ne démarre pas , a l'invite de commande sa me mais ceci "Démarrage du service....................."

    Merci pour votre réponse.
    Il n'existe guère de problèmes sans solution, et parfois l'absence de solution décourage le problème

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2012
    Messages : 142
    Points : 80
    Points
    80
    Par défaut Service
    Le service n'aime pas le ShowMessage au démarrage

    Même avec ceci sa bug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TIdService.ServiceStart(Sender: TService; var Started: Boolean);
    begin
      ShowMessage('Coucou');
      Started := True;
    end;
    Il n'existe guère de problèmes sans solution, et parfois l'absence de solution décourage le problème

  3. #3
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 419
    Points : 1 096
    Points
    1 096
    Par défaut
    Bonjour,

    Pour autant que je sache, la commande net start ne permet pas de paramètres. Tu ne peux pas passer des paramètres à un service par ce biais.

    Il y a quelques solutions.

    * au moment de la création (si via le commande sc, il faut mettre les paramètres dans le binpath)
    * Via un fichier de paramètres à analyser au lancement du service
    * via une application qui communiquera avec ton service
    * toute autre solution que j’aunais pu oublier


    Cordialement

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Citation Envoyé par Gregory666 Voir le message
    Le service n'aime pas le ShowMessage au démarrage
    Et pas qu'au démarrage
    Tu ne peux pas afficher une fenêtre depuis un Service
    Tu ne peux même pas voir les fenêtres lancées (à moins d'avoir spécifié une session de démarrage et un service interactif, mais plus ça va, et encore plus avec le 64bits, un service 32bits n'aura quasiment accès à rien lié aux IHM)

    Pour faire du débogage,
    écrit dans le Journal d'évènement de Windows (perso, mon service est bavard, je lui ai dédié un journal)
    écrit dans un fichier texte
    écrit dans une DB
    envoi un mail
    ...

    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
    //------------------------------------------------------------------------------
    procedure TAutomateLogistiqueService.ServiceAfterInstall(Sender: TService);
    const
      ALxxx_DESCRIPTION = 'Service gérant de façon autonome les interactions'
       + ' entre les modules du WMS xxx (la Gestion des Vagues, le Module Logistique, le Module d’Administration de l’Automate Logistique, ...)'
       + ' et le Sorter Control System (SCS) de yy. L’arrêt de ce service entraîne la perte de la connectivité'
       + ' avec les trieurs automatisés intégrés à la chaîne logistique de xxx.';
      REG_KEY_EVENT_LOG = 'SYSTEM\CurrentControlSet\services\eventlog';
      REG_KEY_xxx_EVENT_LOG = 'xxx Event Log';
    var
      Svc: SC_HANDLE;
      SvcMgr: SC_HANDLE;
      Info: SERVICE_DESCRIPTION;
      Reg: TRegistry;
    begin
      // Ajout de la description dans services.msc
      SvcMgr := OpenSCManager(nil, nil, STANDARD_RIGHTS_REQUIRED);
      try
        Svc := OpenService(SvcMgr, PChar(Self.Name), SERVICE_CHANGE_CONFIG);
        try
          Info.lpDescription := PChar(ALxxx_DESCRIPTION);
          Winapi.WinSvc.ChangeServiceConfig2(Svc, SERVICE_CONFIG_DESCRIPTION, @Info);
        finally
          CloseServiceHandle(Svc);
        end;
      finally
        CloseServiceHandle(SvcMgr);
      end;
     
      // Ajout du journal personnalisé dans mmc.exe dans sa variante "Afficher les journaux d'évènements"
      Reg := TRegistry.Create();
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey(REG_KEY_EVENT_LOG, False) then
        begin
          if Reg.OpenKey(REG_KEY_xxx_EVENT_LOG, True) then
          begin
            // Ajout de l'application courante comme élément concerné par ce journal personnalisé spécifique à xxx
            // Je n'ai pas réussi à changer le fichier evt
            // Il sera donc dans "%SystemRoot%\System32\Winevt\Logs\" ce qui donne "C:\Windows\System32\winevt\Logs\xxx Event Log.evtx"
            if not Reg.KeyExists(Self.Name) then
              Reg.CreateKey(Self.Name);
          end;
        end;
      finally
        Reg.Free();
      end;
    end;

    Pour le paramètrage, voir la réponse de acaumes
    Personnellement, j'ai un petit fichier de paramètrage minimale (cela se résume au nom du serveur DB) ensuite tous les autres paramétrages sont dans des tables de la DB
    Le Service échange par TCP/IP des infos avec ses modules clients.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer plusieurs paramètres dans un callback (débutant!)
    Par pilouface dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 07/02/2007, 21h42
  2. Réponses: 2
    Dernier message: 11/10/2006, 14h37
  3. Réponses: 2
    Dernier message: 09/10/2006, 05h48
  4. Réponses: 1
    Dernier message: 21/03/2006, 15h29
  5. Passer un paramètre dans le script
    Par ipeteivince dans le forum Windows
    Réponses: 2
    Dernier message: 02/03/2006, 18h00

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