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 :

Activer un service avec Delphi


Sujet :

API, COM et SDKs Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Activer un service avec Delphi
    salut

    j'ai un fichier prog1.exe dans c: par ex
    je veux le mettre en service

    un ami m'a donné cette fonction :

    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
     
    function ServiceCreate(sService,sDisplay,sPath:string):bool;
    var
     schm, schs : SC_Handle;
    begin
     result:=false;
     schm:=OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
     if (schm > 0)
      then begin
       schs:=CreateService(schm,pchar(sService),pchar(sDisplay),SC_MANAGER_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,pchar(sPath),nil,nil,nil,nil,nil);
       if schs > 0 then result:=true else messagebox(0,pchar(inttostr(getlasterror)),0,0);
       CloseServiceHandle(schs);
       CloseServiceHandle(schm);
      end;
    end;
    dans mon appli delphi, dans un boutton je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ServiceCreate('zzservice','zzdisplayname','c:\prog1.exe');
    le service est bien créé mais il est en mode "stop"
    ai je oubléi qq chose ? comment faire pour qu'il soit sur start ?

    j'ai fais qq recherche sur le forum et la fq mais ça ne correpsond pas à ce que je veux faire

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Dans la documentation de MS il y a la Fonction suivante StartService.

    The StartService function starts the execution of a service.

    BOOL StartService(

    SC_HANDLE hService, // handle of service
    DWORD dwNumServiceArgs, // number of arguments
    LPCTSTR *lpServiceArgVectors // address of array of argument string pointers
    );

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    merci mais c trop chaud avec els handle etc ...
    la fonction que j'utilise à l'air cool, elle ne demande pas trop de chose
    seulement il y a un problem
    il doit pas être énorme

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    justement la fonction que tu utilises CreateService provient de la meme catégorie que

    See Also

    ChangeServiceConfig, CloseServiceHandle, ControlService, DeleteService, EnumDependentServices, OpenSCManager, QueryServiceConfig, QueryServiceObjectSecurity, QueryServiceStatus, SetServiceObjectSecurity, StartService

    Donc ton code sera

    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
    function ServiceCreate(sService,sDisplay,sPath:string):bool; 
    var 
     schm, schs : SC_Handle; 
    begin 
     result:=false; 
     schm:=OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS); 
     if (schm > 0) 
      then begin 
       schs:=CreateService(schm,pchar(sService),pchar(sDisplay),SC_MANAGER_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,pchar(sPath),nil,nil,nil,nil,nil);
     
       /* CODE AJOUTÉ/MODIFIÉ */
       if schs > 0 then 
       begin
         result:= (StartService(schs,0,nil) <> 0);
      end 
      else messagebox(0,pchar(inttostr(getlasterror)),0,0); 
    
      CloseServiceHandle(schs); 
      CloseServiceHandle(schm); 
      end; 
    end;

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    impossible de compiler :

    [Erreur] Unit1.pas(38): Les types des paramètres VAR originaux et formels doivent être identiques
    [Avertissement] Unit1.pas(40): Constante 0 convertie en NIL
    [Erreur] Unit1.pas(49): ':=' attendu(e) mais ':' trouvé(e)
    [Erreur fatale] Project2.dpr(5): Impossible de compiler l'unité utilisée 'Unit1.pas'

  6. #6
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut J ai 10000000 fois plus simple !
    WinExec('c:\blablabla.exe', SW_SHOWNORMAL);


    essaie ceci ....

    plus simple que ca jcrois pas que c est possible !

    bye ....


    PS: tient moi au courant !

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Re: J ai 10000000 fois plus simple !
    Citation Envoyé par Soporifik
    WinExec('c:\blablabla.exe', SW_SHOWNORMAL);


    essaie ceci ....

    plus simple que ca jcrois pas que c est possible !

    bye ....


    PS: tient moi au courant !
    tu n'as pas compris ma question : je ne veux pas exécuter un prog depuis delphi, je veux juste mettre en service depuis delphi

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    excuse moi je n'avais pas essayé de compiler. La version suivante ne contient pas d'erreur , juste vérifier les uses WinSvc.
    Essait pouvoir si ca fonctionne , sinon les informations se trouvent dans l'aide de microsoft qui est fournit avec Delphi...

    Bonne chance...


    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
     
    function ServiceCreate(sService,sDisplay,sPath:string):bool;
    var schm, schs : SC_HANDLE ;
      ptrParam : LPCTSTR;
    begin
      result:=false;
      schm:=OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if (schm > 0)
      then begin
        schs:=CreateService(schm,pchar(sService),pchar(sDisplay),SC_MANAGER_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,pchar(sPath),nil,nil,nil,nil,nil);
        if schs > 0 then
        begin
          ptrParam := nil;
          result:= StartService(schs,0,ptrParam);
        end
        else messagebox(0,pchar(inttostr(getlasterror)),0,0);
        CloseServiceHandle(schs);
        CloseServiceHandle(schm);
      end;
    end;

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    quand je vérifie, le service est créé en mode "pausing"
    après qq secondes et bien il revient en mode "stopped"

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Je crois que ton application est exécuté qu'une seule fois ou pas du tout. Le probleme est les fonctions de services. Je ne suis pas un expert de se coté, car j'utilise surtout celui fait par Borland. TService.

    Est-ce que tu as pensé utiliser le TService de Delphi? Beaucoup plus facile d'utilisation.

    Un tel projet peut être créé simplement par File > New > Other > Application Service.

    Voici un lien sur un site internet qui explice le fonctionnement du TService et meme un exemple ... si ca t'intéresse

    http://www.supinfo-projects.com/en/2...ices_delphi/0/

    Sinon, je ne peux plus vraiement t'aider.
    Bonne chance.

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    thx ça semble fonctionner grace à ton lien

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

Discussions similaires

  1. [Active Directory] Comment tout récupérer avec Delphi ?
    Par avogadro dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 16/11/2007, 11h44
  2. Réponses: 5
    Dernier message: 15/03/2007, 09h52
  3. Service Windows avec Delphi.net
    Par Alibaba126 dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 04/09/2006, 11h42
  4. Comment gérer des services par programmation avec Delphi ?
    Par isachat666 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 18/12/2005, 18h54
  5. Réponses: 3
    Dernier message: 30/08/2005, 09h09

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