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

VB.NET Discussion :

Debuguer un Window service


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut Debuguer un Window service
    Bonjour.

    J'ai crée un Window service et apparemment ça ne marche pas du tout. Le problème c'est que je n'arrive pas le debugué pour voir d'ou vien le problème. J'ai essayé le Attache Process mais "No BreakPoint loaded" que ce soit directement de puis le project du service ou bien d'une autre instance de VS.

    SOS.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    le plus simple c'est de le faire en win form, et une fois qu'il marche de le transformer en service
    ensuite des try catch avec log d'erreurs permettent de corriger les bugs plus rares
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    salut, voilà comment je procède - dans les très grandes lignes - pour pouvoir débugger un service windows :

    >EDIT oups ! désolé mon exemple est en C# et toi en tu fais du VB.NET.

    Version VB
    Dans les propriétés du projet, indique "Sub main" comme objet de démarrage. Ensuite tu vas dans NomDeTonService.Designer.vb et modifie le point d'entrée comme ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        <MTAThread()> _
        Shared Sub Main()
            Dim service As New ServiceMain()
    #If DEBUG Then
            service.Execute()
    #Else
            Dim ServicesToRun() As ServiceBase = New ServiceBase() {service}
            ServiceBase.Run(ServicesToRun)
    #End If
        End Sub
    pense à virer "<System.Diagnostics.DebuggerNonUserCode()> _" qui nous embête plus qu'autre chose ici.
    Le truc pas génial ici en VB c'est qu'on modifie un fichier .designer.vb ce qui est généralement très déconseillé. Dans le cas présent je pense malgré tout que ça n'aura aucune incidence.

    Je laisse la version C#, au cas où...

    Version C#

    le point d'entrée :
    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
     
        public static class Program
        {
            static void Main()
            {
                ServiceMain service = new ServiceMain();
    #if DEBUG
                //Appel direct à la méthode utilisée dans le OnStart du service
                service.Execute();
    #else
                ServiceBase[] ServicesToRun = new ServiceBase[] { service };
                ServiceBase.Run(ServicesToRun);
    #endif
            }
        }
    Le service est construit en gros de cette façon :
    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
     
    public partial class ServiceMain : ServiceBase
    {
        public ServiceMain()
        {
            InitializeComponent();
        }
     
        protected override void OnStart(string[] args)
        {
            Thread th = new Thread(Execute);
            th.Start();
        }
     
        public void Execute()
        {
            //...
        }
     
        protected override void OnStop()
        {
            //...
        }
    }

  4. #4
    Membre très actif Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    339
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 339
    Par défaut
    Pour attacher un processus et pouvoir le débugger facilement, il est plus simple que le service qui tourne ait été compilé en mode debug. Est-ce le cas avec ton service?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut
    Citation Envoyé par joKED Voir le message
    Pour attacher un processus et pouvoir le débugger facilement, il est plus simple que le service qui tourne ait été compilé en mode debug. Est-ce le cas avec ton service?
    Bonne question. En fait le service que je lance est en version release. c'est pour cela peut être que j'ai "No breakpoint loaded".

    Citation Envoyé par Pol63
    le plus simple c'est de le faire en win form, et une fois qu'il marche de le transformer en service
    ensuite des try catch avec log d'erreurs permettent de corriger les bugs plus rares
    Le traitement du service été déjà dans sur winform et pour des Raisons X j'ai décidé de le mettre en service. Alors ce qui est du traitement du service je suis sure que ça marche a merveille.
    En fait je lance des Timers dans OnStart(), et j'écrit dans le log dans le timer_tick que je lance pour voir est ce que tout vas bien ou pas. Le problemme je crois que les timers ne tournent pas.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    pour débugger, il faut peut etre aussi que les .pdb soit à coté des exe/dll

    pour les timers je crois avoir dejà vu quelqu'un qui disait justement que les timers ne marchent pas dans un service
    je te conseille de te tourner vers system.threading.thread et thread.slepp(millisecondes) qui auront le meme effet
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Lancer un executable a partir d'un windows service
    Par barbar dans le forum VB.NET
    Réponses: 1
    Dernier message: 21/06/2007, 11h42
  2. [C# 2.0] Windows Service Project et désintallation
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/03/2007, 15h54
  3. Windows Service Demarre et Arrête sans rien faire
    Par Bobafett dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/02/2007, 17h32
  4. [C#] [Windows service] Rendre Word Visible ?
    Par chris92 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 26/07/2004, 17h45

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