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

Langage Delphi Discussion :

Mon service Windows ne marche pas


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 42
    Points : 11
    Points
    11
    Par défaut Mon service Windows ne marche pas
    bonjour,

    après installation, le service ne marche pas (ou du moins, il ne m'affiche rien alors qu'il devrait lancer la calculette de windows! pourtant j'ai mis la propriété Interactive = true. voici le code de mon service

    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
     
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ExtCtrls;
     
    type
      TServiceTest = class(TService)
        procedure ServiceStart(Sender: TService);
        procedure ServiceStop(Sender: TService; var Stopped: Boolean);
     
      private
       { Déclarations privées }
      public
        function GetServiceController: TServiceController; override;
        { Déclarations publiques }
      end;
     
    var
      ServiceTest: TServiceTest;
     
    implementation
     
    {$R *.DFM}
     
    procedure KillProgram(ClassName: PChar; Titre: PChar);
    const
        PROCESS_TERMINATE = $0001;
    var
        ProcessHandle : THandle;
        ProcessID: Integer;
        Appli : HWND;
    begin
        Appli := FindWindow(PChar(ClassName), PChar(Titre));
        GetWindowThreadProcessID(Appli, @ProcessID);
        ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
        TerminateProcess(ProcessHandle,4);
    end;
     
    procedure TServiceTest.ServiceStart(Sender: TService);
    begin
     
    MessageBox(0, 'Start', PChar(ServiceTest.DisplayName), MB_OK);
    WinExec('calc.exe', SW_SHOWNORMAL);
     while not Terminated do
        ServiceThread.ProcessRequests(True);
    end;
     
    procedure TServiceTest.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
    KillProgram(nil,'Calculatrice');
    MessageBox(0, 'Stop', PChar(serviceTest.DisplayName), MB_OK);
    Stopped := True;
    end;
     
    procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      ServiceTest.Controller(CtrlCode);
    end;
     
    function TServiceTest.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;
     
    end.
    Merci

  2. #2
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    salut,
    t'as essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WinExec(PChar('calc.exe'), SW_SHOWNORMAL);
    sinon:
    http://delphi.developpez.com/faq/?page=services
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 42
    Points : 11
    Points
    11
    Par défaut
    oh oui j'ai tout essayé!
    j'ai relu pratiquement tout ce qu'il ya comme Doc dans Internet.
    Il n'y a pas un seul endroit ou on parle de Comment transformer un exe en un service windows avec delphi.

    je veux juste que mon application (qui marche très bien d'ailleurs s'exécute en tache de fond! c tout !

    meme dans la nouvelle faq il n'y aucune allusion là-dessus!

    Que quelqu'un m'aide SVP!! Merci bp

  4. #4
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Déja la boucle while doit être dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TMonService.ServiceExecute(Sender: TService);
    begin
    	while not Terminated do
    		ServiceThread.ProcessRequests(True);
    end;
    normalement lors de la création de ton service delphi a du te rajouter ces lignes et la doc donne ce genre d'exemple mais bon...

    au start ça se passe comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFMainSrv.ServiceStart(Sender: TService; var Started: Boolean);
    begin
    	Started := True;
    	MessageBox(0, 'Start', PChar(ServiceTest.DisplayName), MB_OK);
    	WinExec(PChar('calc.exe'), SW_SHOWNORMAL); 
    end;
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    Salut

    je te deconseille totalement d'utiliser un service dans l'optique d'interragir avec l'utilisateur -> le service peux utiliser une autre session (donc pas de bureau pas de fenetre pas d'affichage)

    utilise des fichiers txt pour essayer ton service

    @+
    @+

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 42
    Points : 11
    Points
    11
    Par défaut
    j'ai déjà fait tout ce que tu viens de dire!

    En fait, j'utilise les Templates Delphi pour créer un service!
    après, j'essaie d'associer à mes évènements ce qu'il faut faire!
    là, je viens de reprendre un nouveau projet et j'ai mis le code que t'as renseigné mot à mot! mais rien ne se passe! meme en allant à "Gestionnaire de taches" je ne trouve pas le process calc.exe

    j'ai fait une gourde? ça marche chez toi?

    Merci

  7. #7
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    oui mon service fonctionne mais il fait son job.
    Il n'essaye pas de lancer d'autres applis, il reçoit des ordres et les traite...

    Donc bon... est ce que le problème n'est pas ailleurs ? Pourquoi comme le dit WolffN as-tu besoin de lancer la calculatrice ?
    Je n'ai jamais poussé vers un service interactif mais tes recherches doivent porter sur cette propriété en priorité (voir à se taper les msdn !!! )
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 42
    Points : 11
    Points
    11
    Par défaut
    Pourquoi comme le dit WolffN as-tu besoin de lancer la calculatrice ?
    en fait c pas la calculatrice que je ve lancer.
    j'ai une application qui renvoie des statistiques sur l'envoi et réception des emails sur le serveur mail de ma boite!

    on veut que cette application s'exécute en tache de fond (même à station fermée, même lorsque personne n'est connecté dessus!)

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 42
    Points : 11
    Points
    11
    Par défaut
    Pourquoi comme le dit WolffN as-tu besoin de lancer la calculatrice ?
    en fait c pas la calculatrice que je ve lancer.
    j'ai une application qui renvoie des statistiques sur l'envoi et réception des emails sur le serveur mail de ma boite!

    on veut que cette application s'exécute en tache de fond (même à station fermée, même lorsque personne n'est connecté dessus!)

  10. #10
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Je vois....bon ben si cette application c vous qui l'avez développé en interne il faut la transformer en service windows.
    sinon je ne vois pas comme je l'ai dis j'ai jamais essayé l'interactif...
    mais je me demande si un appli fenêtrée avec un handle peut être exécuté en dehors des sessions ?? j'en doute mais j'ai aucun argument...

    Tiens nous au courant de tes progressions cela peut être intéressant
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

Discussions similaires

  1. Les processus créés par system() ne sont pas arrêtés quand mon service windows stoppe
    Par Glavio dans le forum Programmation et administration système
    Réponses: 6
    Dernier message: 30/04/2012, 22h25
  2. Pourquoi mon XmlInclude( dataset) ne marche pas?
    Par Arbiorix dans le forum Services Web
    Réponses: 2
    Dernier message: 09/12/2008, 17h17
  3. mon pavé numérique ne marche pas sous debian
    Par guismoman33 dans le forum Debian
    Réponses: 3
    Dernier message: 25/03/2008, 16h38
  4. mon header location ne marche pas
    Par 123quatre dans le forum Langage
    Réponses: 1
    Dernier message: 29/12/2007, 16h46
  5. window.location marche pas
    Par isabe dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 31/07/2007, 10h31

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