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

API, COM et SDKs Delphi Discussion :

Comment gérer des services par programmation avec Delphi ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut Comment gérer des services par programmation avec Delphi ?
    Bonjour,

    J'ai deux services dont je connais le nom.

    Je voudrais pouvoir tester leur état, et s'ils sont démarrés, les arrêter.

    Je connais les commandes net start et net stop en ligne de commande mais comment fait-on cela en delphi ???

    Merci de votre aide.

    Isa
    Isachat

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    c'est mon cadeau de noël....
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    Function ReadServiceState(ComputerName:string;ServiceName:string):String;
    var
      Srv_CtrlMngr: SC_Handle;
      Srv_Hwnd: SC_Handle;
      Srv_State : TServiceStatus;
    begin
        Srv_CtrlMngr := OpenSCManager(PCHAR(ComputerName), nil, SC_MANAGER_ALL_ACCESS);
        if Srv_CtrlMngr = 0 then
        begin
            ReadServiceState := 'Déconnecté au services manager';
            exit;
        end;
        try
            Srv_Hwnd := OpenService(Srv_CtrlMngr, PChar(ServiceName), SERVICE_ALL_ACCESS);
            If Srv_Hwnd = 0 then
            begin
                ReadServiceState:='Le service n''existe pas!';
            end
            else
            begin
                QueryServiceStatus(Srv_Hwnd, Srv_State);
                Case Srv_State.dwCurrentState of
                    SERVICE_STOPPED          : ReadServiceState := 'Service arrêté';
                    SERVICE_START_PENDING    : ReadServiceState := 'SERVICE_START_PENDING';
                    SERVICE_STOP_PENDING     : ReadServiceState := 'SERVICE_STOP_PENDING';
                    SERVICE_RUNNING          : ReadServiceState := 'En exécution';
                    SERVICE_CONTINUE_PENDING : ReadServiceState := 'SERVICE_CONTINUE_PENDING';
                    SERVICE_PAUSE_PENDING    : ReadServiceState := 'SERVICE_PAUSE_PENDING';
                    SERVICE_PAUSED           : ReadServiceState := 'En pause';
                else
                    ReadServiceState := 'Etat inconnu';
                end;
                CloseServiceHandle(Srv_Hwnd);
            end;
        finally
            CloseServiceHandle(Srv_CtrlMngr);
        end;
    end;
     
    Function StartThisService(ComputerName:string;ServiceName:string):boolean;
    var
      Srv_CtrlMngr: SC_Handle;
      Srv_Hwnd: SC_Handle;
      Arg:PChar;
    begin
        StartThisService := FALSE;
        Srv_CtrlMngr := OpenSCManager(PCHAR(ComputerName), nil, SC_MANAGER_ALL_ACCESS);
        if Srv_CtrlMngr = 0 then
        begin
            exit;
        end;
        try
            Srv_Hwnd := OpenService(Srv_CtrlMngr, PChar(ServiceName), SERVICE_ALL_ACCESS);
            If Srv_Hwnd <> 0 then
            begin
                Arg:=nil;
                if StartService(Srv_Hwnd, 0, Arg)<>FALSE then
                begin
                    StartThisService := TRUE;
                end;
                CloseServiceHandle(Srv_Hwnd);
            end;
        finally
            CloseServiceHandle(Srv_CtrlMngr);
        end;
    end;
     
    Function StopThisService(ComputerName:string;ServiceName:string):boolean;
    var
      Srv_CtrlMngr: SC_Handle;
      Srv_Hwnd: SC_Handle;
      Srv_State : TServiceStatus;
    begin
        StopThisService := FALSE;
        Srv_CtrlMngr := OpenSCManager(PCHAR(ComputerName), nil, SC_MANAGER_ALL_ACCESS);
        if Srv_CtrlMngr = 0 then
        begin
            exit;
        end;
        try
            Srv_Hwnd := OpenService(Srv_CtrlMngr, PChar(ServiceName), SERVICE_ALL_ACCESS);
            If Srv_Hwnd <> 0 then
            begin
                if ControlService(Srv_Hwnd, SERVICE_CONTROL_STOP, Srv_State)=TRUE then
                begin
                    StopThisService := TRUE;
                end;
                CloseServiceHandle(Srv_Hwnd);
            end;
        finally
            CloseServiceHandle(Srv_CtrlMngr);
        end;
    end;
    reste à ajouter WinSvc dans la clause uses

    ca devrait faire l'affaire?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 101
    Points : 155
    Points
    155
    Par défaut
    pas mal.
    Ce serait bien dans la FAQ delphi ça non ?
    Nut62
    Parisien Delphinaute Faq Delphi
    Sortant d'une longue hibernation
    Culture Merchandising

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Merci beaucoup ;-)

    En fait j'ai retrouvé quelquechose d'équivalent dans les sources de notre programme mais je pense effectivement que cela aurait sa place dans la FAQ.

    Isa
    Isachat

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par isachat666
    je pense effectivement que cela aurait sa place dans la FAQ.
    C'est déjà fait dans la prochaine version, à paraître très prochainement.
    13. Services Windows(12)
    13.1. Création de service(1)
    Comment connaître le répertoire et le nom de mon service ?
    13.2. Gestion des services NT(11)
    Introduction à la gestion des services NT
    Comment démarrer un service ?
    Comment déterminer l'état courant d'un service ?
    Comment modifier l'état d'un service (Stop, Pause, ...) ?
    Comment retrouver la liste des services dépendants d'un service ?
    Comment se connecter au Service Control Manager ?
    Comment lister les services référencés dans le SCM ?
    Comment se déconnecter d'un Service Control Manager ?
    Comment récupérer la configuration d'un service ?
    Comment modifier la configuration d'un service ?
    Comment obtenir le nom court ou long d'un service ?

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

Discussions similaires

  1. Comment créer des ALIAS par programme
    Par HASSIOMAR dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/11/2010, 09h30
  2. Réponses: 1
    Dernier message: 07/04/2008, 21h29
  3. Comment gérer des sous ensembles avec des "enum" ?
    Par ogattaz dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2007, 10h29
  4. Réponses: 2
    Dernier message: 07/08/2006, 16h43
  5. Réponses: 5
    Dernier message: 17/07/2006, 18h34

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