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 :

Problème avec l'utilisation de LogMessage


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    599
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 599
    Points : 2 024
    Points
    2 024
    Par défaut Problème avec l'utilisation de LogMessage
    Bonjour,

    Je suis en train d'écrire un Service windows.
    Je génère des message dans les journaux système Windows à l'aide de la fonction LogMessage

    Je fais des trucs du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LogMessage('Mon message', EVENTLOG_ERROR_TYPE );
    Le problème est que dans le journal Windows, dans la boite de propriété du message (pour avoir le message complet) ajoute tout un tas d'informations comme quoi il n'a pas tous les éléments en main

    Du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    La description pour l'ID d'événement ( 0 ) dans la source (MonProgramme) est introuvable. L'ordinateur local n'a peut-être pas les informations de Registre ou les librairies requises pour afficher les messages émanant d'un ordinateur distant. Vous pourrez peut-être utiliser l'option /AUXSOURCE= pour récupérer cette description. Reportez-vous aux rubriques Aide et support pour plus de détails. Les informations suivantes font partie de l'événement : [b]Mon Message[/b]
    J'en déduis qu'il faudrait probablement que je me servent des paramètres optionnels de LogMessage. Mais je ne comprend pas réellement comment ils fonctionnent.

    Existe-il un moyen simple pour que Windows ne génère pas tout ce charabiat ?

    Merci d'avance

    Cordialement
    Vanquish
    --
    vanquish

  2. #2
    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,
    as-tu regardé ici
    http://objecteverywhere.chez-alice.fr/MessagesEventLog.htm

  3. #3
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Salut !!

    Pour utiliser LogMessage de TService sans tout le charabiat autour, il faut qu'une table des messages soit disponible dans un fichier, et que windows sache ou se trouve ce fichier. Le plus simple est d'inclure cette table des messages dans l'exe du service. Voici comment faire :

    Tout d'abord, il faut que tu créé une table des messages dans un fichier ressource. Pour cela, tu peux télécharger cet éditeur de resource qui prend en charge les ressources de type message : http://www.wilsonc.demon.co.uk/d9resourceeditor.htm
    (Faire Ressource | Add Ressources | Message Table, puis en face de chaque ID indiquer le message, et enfin, enregistrer le .res)

    Une fois cela effectué, tu ajoute dans ton code l'inclusion de ton fichier ressource dans ton exe grâce au code suivant :
    dans le cas ou ton fichier ressource s'appel MessageTable.res.

    Il faut déclarer auprès de windows le fichier qui contient la MessageTable (en l'occurence ton .exe). Pour ce faire, j'applique ce code dans l'événement ServiceAfterInstall
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TMonService.ServiceAfterInstall(Sender : TService);
    var
      Registre : TRegistry;
    begin
      Registre := TRegistry.Create;
      Registre.RootKey := HKEY_LOCAL_MACHINE;
      Registre.OpenKey('System\CurrentControlSet\Services\EventLog\Application\' + MonService.DisplayName, True);
      Registre.WriteString('EventMessageFile', ParamStr(0));
      Registre.WriteInteger('TypeSupported', 3);//Nombre de message incluts dans la MessageTable
      Registre.Free;
      //Log('Service installé !');
    end;
    Ensuite, pour inscrire ton evenement dans le journal d'application de windows, il faut que tu appel LogMessage de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LogMessage('Indique ici ton message', 1, 0, 3);
    ou 3 est le numéro de message dans la table des messages. Le texte du message que tu passe à la fonction LogMessage n'est donné qu'au cas ou la table des messages n'est plus disponible, par defaut, c'est le message de la table des messages qui est utilisé (qui correspont à ID d'entrée). Pour les autres valeurs, F1 va mieux t'aider que moi !

    enfin penser à désinscrire ton exe lors de la désinstallation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TMonService.ServiceAfterUninstall(Sender : TService);
    var
      Registre : TRegistry;
    begin
      Registre := TRegistry.Create;
      Registre.RootKey := HKEY_LOCAL_MACHINE;
      Registre.DeleteKey('System\CurrentControlSet\Services\EventLog\Application\' + MonService.DisplayName);
      Registre.Free;
      //Log('Service désinstallé !');
    end;
    Voila, j'espère que c'est clair ! Je n'ai pas les yeux enface des trous à cette heure !!

    Une entrée dans la FAQ à ce sujet est en cours de rédaction
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  4. #4
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    599
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 599
    Points : 2 024
    Points
    2 024
    Par défaut
    Bonjour,

    Citation Envoyé par NoisetteProd
    Voila, j'espère que c'est clair ! Je n'ai pas les yeux enface des trous à cette heure !!
    A la première lecture, ça à l'air très clair.
    Bon, j m'imprime ça et j'essaye de mettre en application.

    Merci à tous les 2.
    --
    vanquish

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

Discussions similaires

  1. [JUnit] [Débutant] Problème avec l'utilisation de JUnit
    Par Juanito-Toto dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 22/12/2005, 16h49
  2. Problème avec l'utilisation d'un module
    Par goblin dans le forum Modules
    Réponses: 4
    Dernier message: 09/11/2005, 20h55
  3. Problème avec l'utilisation de librairies
    Par Aradesh dans le forum MFC
    Réponses: 3
    Dernier message: 01/08/2005, 15h00
  4. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  5. Problème avec l'utilisation de la fonction clock
    Par Matgic95 dans le forum C++Builder
    Réponses: 13
    Dernier message: 09/05/2005, 19h27

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