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

C++Builder Discussion :

Application Service [FAQ]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Par défaut [Resolu]Application Service
    Bonjour,
    j'aimerai savoir comment lancer, mais surtout arreter (oui, parce que pour lancer, il suffit de faire un ShellExecute) une application service.
    Ce serai pour gerer mes serveurs Apache, MySQL et SMTP

  2. #2
    Membre éprouvé
    Avatar de Alacazam
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 88
    Par défaut
    Salut,

    Je ne sais pas si ça répond à la question, mais tu peux aller voir ici :
    http://www.developpez.net/forums/vie...hlight=#229238

    Selon ce que tu veux faire, le Timer peut être utile ou non ...

    En espérant avoir pu t'aider
    Bonne Continuation
    Mathieu

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Par défaut
    peut etre que je me trompe, mais aucune fenetre n'est ouverte pour une application service, donc je ne pourrait pas trouver le Handle de la fenetre avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HWND HandleF = FindWindow("About", "#32770");
    comme dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HWND HandleF = FindWindow("About", "#32770"); 
    if (HandleF) { 
       PostMessage(HandleF, WM_CLOSE, NULL, NULL); 
       Timer1->Enabled = false; 
       }

  4. #4
    Membre éprouvé
    Avatar de Alacazam
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 88
    Par défaut
    Salut,

    C'est peut-être moi qui me trompe sur la définition d'Application Service ...

    Si aucune fenêtre n'est réellement créée, je ne sais pas si FindWindow permet aussi d'accéder aux processus en cours ...
    Essaye quand même ;
    Si cela ne marche pas, je te poste ce soir une procédure de CALLBACK qui pemet d'énumérer toutes les fenêtres actives, ainsi que les processus.

    Bonne Chance
    Mathieu

  5. #5
    Membre éprouvé
    Avatar de Alacazam
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 88
    Par défaut
    Finalement, j'ai retrouvé ça

    Unit1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    bool CALLBACK EnumWindowsProc(HWND hWnd, TListView *ListView); 
    class TForm1 : public TForm 
    { 
      __published:
        TListView *ListView1; 
        TButton *Button1; 
        void __fastcall Button1Click(TObject *Sender);
      private:
      public:
        __fastcall TForm1(TComponent* Owner);
    };
    Unit1.cpp
    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      ListView1->Items->Clear();
      EnumChildWindows(GetDesktopWindow(),(WNDENUMPROC)EnumWindowsProc,(LPARAM)ListView1);
      EnumWindows((WNDENUMPROC)EnumWindowsProc,(LPARAM)ListView1);
      EnumDesktopWindows(NULL,(WNDENUMPROC)EnumWindowsProc,(LPARAM)ListView1);
    }
     
    bool CALLBACK EnumWindowsProc(HWND hWnd, TListView *ListView)
    {
      char WindowName[80], ClassName[80];
      GetWindowText(hWnd, WindowName, 80);
      GetClassName(hWnd, ClassName, 80);
      ListView->Items->Add();
      int i=ListView->Items->Count-1;
      ListView->Items->Item[i]->Caption=AnsiString(WindowName);
      ListView->Items->Item[i]->SubItems->Add(AnsiString(ClassName));
      ListView->Items->Item[i]->Update();
      return true;
    }
    Ensuite, tu reconnais ton processus ... et le tour est joué

    Je pense que ça devrait convenir

    Bonne Continuation
    Mathieu

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Par défaut
    Moi j'ai trouvé ça, je pense que ca correspond mieux, mais j'arrive pas à me servir de la structure SERVICE_STATUS du ServiceControl. J'ai trouvé ces infos dans l'aide du Windows SDK, à Service Functions :

    voila ce que j'ai fais :
    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
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "monitor.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    SC_HANDLE schandle, startApache, stopApache;
    SERVICE_STATUS *service_status;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    schandle=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    startApache=OpenService(schandle, "Apache", SERVICE_START );
    StartService(startApache, NULL, NULL);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    stopApache=OpenService(schandle, "Apache", SERVICE_STOP);
    ControlService(stopApache, SERVICE_CONTROL_STOP, service_status);
    }
    Button1 pour Démarrer, et ca marche !
    Button2 pour arreter, mais ca marche pas!

  7. #7
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    tu a oublié un léger détail,
    tu dois ouvrir le service avec la possibilité de Démarrer,Arrêter, interroger l'état du Service

    utilise le code suivant

    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
     
    SERVICE_STATUS OpenServStatus;
    SC_HANDLE  schandle; Fservice;
    schandle=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); 
    Fservice=OpenService(schandle,
                            "Apache", SERVICE_QUERY_STATUS|SERVICE_START|SERVICE_STOP);
     
    // maintenant pour démarre le Service
     
    StartService(Fservice,NULL,NULL);
     
    // pour le Stopper
    ControlService(FWatchService,
                         SERVICE_CONTROL_STOP,
                         &OpenServStatus);
    Avec mes Salutations
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Par défaut
    merci, ca marche maintenant

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

Discussions similaires

  1. problème application service
    Par zoheir13 dans le forum Delphi
    Réponses: 2
    Dernier message: 16/05/2007, 18h13
  2. ecriture base de registre dans application service
    Par zoheir13 dans le forum Delphi
    Réponses: 1
    Dernier message: 16/05/2007, 17h42
  3. Application Service Windows
    Par Neo41 dans le forum Visual C++
    Réponses: 9
    Dernier message: 10/05/2007, 10h22
  4. Comment créer une application Service qui lance un .exe.
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 18/05/2006, 11h37
  5. Inscrire une application service ds le journal d'évènements
    Par laadhar dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 30/01/2006, 21h01

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