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 :

Propriété Description Tservice


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut Propriété Description Tservice
    Bonjour,

    Je cherche le moyen de noter une description dans la description d'un service que j'ai fait sous XE2, de manière à ce que lorsque l'on est dans la gestion des services de Windows ont puisse consulter cette information.

    Je ne trouve pas cette propriétés ni d'api permettant de le faire.

    Merci pour votre aide.
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  2. #2
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    Bonjour,

    à ma connaissance il n'y en a pas, il faut le mettre manuellement dans la base de registre, après l'installation :

    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
    procedure TService1.ServiceAfterInstall(Sender: TService);
    var
      Reg: TRegistry;
    begin
      Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
        begin
          Reg.WriteString('Description', 'Description de mon service.');
          Reg.CloseKey;
        end;
      finally
        Reg.Free;
      end;
    end;
    @++
    Dany

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    si j'en crois mon unité NTService, le nom du service est donné dans l'appel à CreateServiceA()

    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
     
    function Install(Name,Caption,Command:string):boolean;
     var
      scm:THandle;
      srv:THandle;
     begin
      Result:=False;
      scm:=OpenSCManagerA(nil, nil, SC_MANAGER_ALL_ACCESS);
      if scm=0 then exit;
      srv:= CreateServiceA(
       scm,
       PChar(Name), PChar(Caption),
       SERVICE_ALL_ACCESS,
       SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS,
       SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
       PChar(Command),
       nil, nil, nil, nil, nil
      );
      if srv<>0 then begin
       Result:=True;
       CloseServiceHandle(srv);
      end;
      CloseServiceHandle(scm);
     end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par skywaukers Voir le message
    Bonjour,

    à ma connaissance il n'y en a pas, il faut le mettre manuellement dans la base de registre, après l'installation :

    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
    procedure TService1.ServiceAfterInstall(Sender: TService);
    var
      Reg: TRegistry;
    begin
      Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
        begin
          Reg.WriteString('Description', 'Description de mon service.');
          Reg.CloseKey;
        end;
      finally
        Reg.Free;
      end;
    end;
    @++
    Dany
    Merci SkyWaukers,

    j'avais vu cette entrée en BdR mais j'aurais préféré trouver une API, de manière à mettre à jour lors de l'install.
    Je vais donc me reporter sur l'event AfterInstall du service pour placer cette description.

    C'est bizarre que cette propriété ne soit pas présente dans Le Tservice de Delphi, il me semble que dans Visual studio elle existe pour la classe ServiceInstaller...
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  5. #5
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    si j'en crois mon unité NTService, le nom du service est donné dans l'appel à CreateServiceA()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function Install(Name,Caption,Command:string):boolean;
     var
      scm:THandle;
      srv:THandle;
     begin
      Result:=False;
      scm:=OpenSCManagerA(nil, nil, SC_MANAGER_ALL_ACCESS);
      if scm=0 then exit;
      srv:= CreateServiceA(
    ...
    Bonjour Paul,

    Je ne comprends pas bien ta réponse, mais peut être que ma question n'était pas très claire.

    Il s'agit non pas d'installer un service, mais de pouvoir renseigner à un service que j'ai écris, l'entrée "Description" qui est visible lorsque tu ouvres la gestion des services de Windows.
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Paul, n'est-ce pas DisplayName ?
    DisplayName identifie le service dans le gestionnaire de contrôle de services.
    C'est son Libellé sur la première colonne du "services.msc"
    CastorCharly souhaite la Deuxieme colonne

    Bonjour Maitre Castor ! !

    Citation Envoyé par castorcharly Voir le message
    Il s'agit non pas d'installer un service, mais de pouvoir renseigner à un service que j'ai écris, l'entrée "Description" qui est visible lorsque tu ouvres la gestion des services de Windows.
    Je pense que Paul, évoquait que l'on pouvait définir la valeur dès l'installation donc avant son lancement car il a du confondre DisplayName et la Description


    NTService ? C'est une unité à toi Paul ?

    Sinon remarque similaire, DisplayName correspond au Caption de Paul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateService(SvcMgr, PChar(Name), PChar(DisplayName),
            SERVICE_ALL_ACCESS,...
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SC_HANDLE WINAPI CreateService(
      _In_       SC_HANDLE hSCManager,
      _In_       LPCTSTR lpServiceName,
      _In_opt_   LPCTSTR lpDisplayName,
    Citation Envoyé par msdn
    hSCManager [in]

    A handle to the service control manager database. This handle is returned by the OpenSCManager function and must have the SC_MANAGER_CREATE_SERVICE access right. For more information, see Service Security and Access Rights.
    lpServiceName [in]

    The name of the service to install. The maximum string length is 256 characters. The service control manager database preserves the case of the characters, but service name comparisons are always case insensitive. Forward-slash (/) and backslash (\) are not valid service name characters.
    lpDisplayName [in, optional]

    The display name to be used by user interface programs to identify the service. This string has a maximum length of 256 characters. The name is case-preserved in the service control manager. Display name comparisons are always case-insensitive.
    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

  7. #7
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Le troll,

    Je parle de la description, pas du displayname,
    par exemple pour

    le service [PolicyAgent]
    le displayname est en FR [Agent de stratégie IPsec]
    et la description est [La sécurité du protocole Internet (IPSec) prend en charge l’authentification de l’homologue réseau, l’authentification de l’origine des données, ...]

    C'est cette description que je veux implémenter, pour mes services.
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Mince, j'ai du édite trop tard, j'ai pris la hotline au bureau

    Citation Envoyé par ShaiLeTroll Voir le message
    Paul, n'est-ce pas DisplayName ?
    DisplayName identifie le service dans le gestionnaire de contrôle de services.
    C'est son Libellé sur la première colonne du "services.msc"
    CastorCharly souhaite la Deuxieme colonne
    Il serait plus prudent d'utiliser ChangeServiceConfig2

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BOOL WINAPI ChangeServiceConfig2(
      _In_      SC_HANDLE hService,
      _In_      DWORD dwInfoLevel,
      _In_opt_  LPVOID lpInfo
    );

    Citation Envoyé par msdn
    SERVICE_CONFIG_DESCRIPTION : The lpInfo parameter is a pointer to a SERVICE_DESCRIPTION structure.
    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

  9. #9
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Mince, j'ai du édite trop tard, j'ai pris la hotline au bureau



    Il serait plus prudent d'utiliser ChangeServiceConfig2


    Code c++ :
    Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BOOL WINAPI ChangeServiceConfig2(</p><p> _In_ SC_HANDLE hService,</p><p> _In_ DWORD dwInfoLevel,</p><p> _In_opt_ LPVOID lpInfo</p><p>);

    Ah, oui c'est peut être aussi une solution. Je vais tester cette API.

    Merci
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  10. #10
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    L'évènement AfterInstall ne s'exécute qu'une fois lors de l'installation du service. Ceci dit peut-être qu'avec l'API ce sera plus sûr au niveau des droits.

    @++
    Dany

  11. #11
    Membre actif
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 416
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par skywaukers Voir le message
    L'évènement AfterInstall ne s'exécute qu'une fois lors de l'installation du service. Ceci dit peut-être qu'avec l'API ce sera plus sûr au niveau des droits.

    @++
    Dany
    Oui pour afterInstall c'est ce que j'ai essayé et ça marche.
    Pour les droits, j'ai pas encore testé l'API, mais dans le cas qui est en souffrance, c'est moi qui fait les installs (plusieurs services interactifs entre eux), j'ai donc le droit de modifier la registry comme je veux.

    La description est pratique pour mettre des notes de maintenance, des mises en garde etc. C'est sur un de nos serveurs et je ne suis pas seul à faire la maintenance, surtout en cas d'absence.

    Merci à toi et à tous pour cette aide
    “La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.” Antoine de Saint-Exupéry.

    D1..D7-2005,2006-Xe2 Ent-XE7 archi-MsSql 2005..2008 & R2, FB 1.5..2.5.x.x -Win10,Win7/64-Xp-
    _____________________________________________________

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Cette question me fut bien utile et ma réponse de l'époque m'a fait gagner du temps aujourd'hui même
    car je viens de passer un simple exe sous la forme d'un service, voici le code :
    Le sujet n'est pas marqué en ce mois de février 2015,
    j'espère que castorcharly a tout de même réussi son changement de description depuis septembre 2013

    Cela a fonctionné sans soucis sur un Win7 SP1

    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
    procedure TAutomateLogistiqueService.ServiceAfterInstall(Sender: TService);
    const
      ALHRZ_DESCRIPTION = '...';
    var
      Svc: SC_HANDLE;
      SvcMgr: SC_HANDLE;
      Info: SERVICE_DESCRIPTION;
    begin
      SvcMgr := OpenSCManager(nil, nil, STANDARD_RIGHTS_REQUIRED);
      try
        Svc := OpenService(SvcMgr, PChar(Self.Name), SERVICE_CHANGE_CONFIG);
        try
          Info.lpDescription := PChar(ALHRZ_DESCRIPTION);
          Winapi.WinSvc.ChangeServiceConfig2(Svc, SERVICE_CONFIG_DESCRIPTION, @Info);
        finally
          CloseServiceHandle(Svc);
        end;
      finally
        CloseServiceHandle(SvcMgr);
      end;
    end;
    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

Discussions similaires

  1. [AC-2003] Modifier la propriété "Description" d'une table en VBA ?
    Par Poulki dans le forum VBA Access
    Réponses: 4
    Dernier message: 16/07/2009, 17h13
  2. Réponses: 3
    Dernier message: 23/01/2008, 13h15
  3. Fenetre de description de propriété disparu
    Par mr_keyser dans le forum Visual Studio
    Réponses: 4
    Dernier message: 31/05/2007, 12h46
  4. Réponses: 2
    Dernier message: 29/05/2007, 22h48
  5. Propriété Description d'un module
    Par Junior_jef dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 09h28

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