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

Visual Studio Discussion :

debug application service


Sujet :

Visual Studio

  1. #1
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut debug application service
    Bonjour, bonjour...
    Je fais une application service Windows. Or, pour faire tourner un tel service, c'est tout un boulot (cération de projet d'installation, installation, démarrage etc...) ce qui n'est pas très pratique pour le debug...
    Est-ce qu'il y a moyen de faire tourner une application service en mode debug sur VS2005 ?
    (Je me souviens par exemple d'un objet NTService pour VB6 qui permettait soit de faire un service soit une application, ce qui était bien pratique.....)
    Merci et bonne jounrée !(enfin, ce qu'il en reste)!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Salut,

    Si le code du projet de service est bien séparé de ton code métier tu dois pouvoir facilement te créer une petite appli winform en plus de ton projet principale qui encapsule ton code métier pour débuguer.

    Sinon une astuce trouvé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
    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
        * //Dans la classe du service :
        * #if DEBUG
        * private static MyService m_serv = new MyService();
        * #endif
        *
        * static void Main()
        * {
        * #if !DEBUG
        * System.ServiceProcess.ServiceBase[] ServicesToRun;
        * // More than one user Service may run within the same process. To add
        * // another service to this process, change the following line to
        * // create a second service object. For example,
        * //
        * // ServicesToRun = New System.ServiceProcess.ServiceBase[] {new MyService(), new MySecondUserService()};
        * //
        * ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyService() };
        * System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        * #else
        * m_serv.OnStart (new string[0]);
        * System.Windows.Forms.Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
        * System.Windows.Forms.Application.Run (new dbgForm());
        * #endif
        * }
        *
        * #if DEBUG
        * private static void Application_ApplicationExit( object sender, EventArgs e)
        * {
        * m_serv.OnStop();
        * }
        * #endif
        *
        *
        *
        *
        *
        * //Dans un fichier à part :
        * #if DEBUG
        * internal class dbgForm : System.Windows.Forms.Form
        * {
        * public dbgForm ()
        * {
        * this.Width = 400;
        * this.Height = 20;
        * this.Text = "MyService (Debug Mode)";
        * this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
        * }
        * }
        * #endif
    En tout les cas l'idée est d'avoir un autre projet de type exe qui te permet de débuguer.

  3. #3
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Ben oui, t'as raison...
    Ce que je crains toujours, c'est que certains éléments de l'application ne réagissent pas de la même manière dans une application WindowsForm que dans un service... En tous cas, merci pour l'info. L'astuce en lien est pas mal mais un peu lourde...

    Et que la vie vous soit agréable en cette après-midi... Pas de folies et à +

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Ce qui peut surtout changer c'est le compte sous lequel s'exécute ton code effectivement, faut y faire attention.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Attention quand tu fait tes tests dans une appli WinForm standard et dans un Service...

    Il y a effectivement des comportements qui peuvent varier... Par exemple le choix de certains composants, tu les choisis comme d'habitude quand tu fait du winform... ca marche pendant les tests, et plus du tout en prod... c'est le cas des objets Timer (System.Windows.Form.Timer) Ca marche pendant les tests en winforms et pas du tout en prod... (pas de pompage de la queue de messages windows)

    Mais une fois que tu a fait abstraction et éviter tous ces éceuils... ya plus aucun problème.

  6. #6
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Je pense qu'en principe, tout ce qui vient de System.Windows.Forms ne devrait pas être utilisé dans un service ?
    (Pour les timers il y a les System.Timers.Timer qui fonctionnent très bien en service)
    Merci tout le monde !!!

  7. #7
    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 : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 339
    Par défaut
    Même si ce sujet est résolu, je viens apporter ma pierre à l'édifice.

    En fait, c'est assez simple de débugger un service windows!

    Il suffit, a l'aide de VS2005, d'attacher le débuggeur au processus.

    En gros:
    - Dans le service, poser un Thread.Sleep(20000) (pas dans le onstart, mais dans la première méthode ou fonction utilisée) pour avoir le temps d'attacher le processus
    - installer son service. Attention, pour pouvoir le débugger, il va falloir installer le contenu du répertoire monappli/obj/debug, pas la version release.
    Bien entendu, le seul moyen d'avoir du contenu dans ce rep est de lancer son projet comme si c'était une appli normal. VS va crier qu'il est pas d'accord, mais il l'aura compilé en mode debug, et comme c'est ça qu'on veut...
    - lancer alors le service normallement
    - retourner dans Visual Studio
    - CTRL+ALT+P ou outils/attacher un processus
    - apparait alors la liste des process en cours
    - cocher les cases permettant d'afficher tous les processus en cours
    - choisir le process qui va bien
    - et cliquer sur attach

    Dès lors, vous voici avec un débugger attaché au service, ce qui va vous permettre de suivre pas à pas l'évolution de celui ci. Très pratique n'est ce pas?

  8. #8
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Merci joKED,
    installer son service. Attention, pour pouvoir le débugger, il va falloir installer le contenu du répertoire monappli/obj/debug, pas la version release.
    Suis pas sur d'avoir tout compris principalement sur l'installation d'un service...
    Je n'ai pas trouvé comment installer mon service sans passer par un projet d'installation. Je suis sur Vista . Alors c'est tout un bigntz... J'ai pas trouvé le moyen d'installer un sevice avec une commande toute simple style >monservice -install.
    Faut dire aussi que je ne suis pas foutu de trouver installutil.exe sur mon ordi...

  9. #9
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Bon, je réponds tout seul...
    1. Trouver installutil -> C:\Windows\Microsoft.NET\Framework\v1.1.4322 ou v2.0.50727
    2. ajouter ce chemin dans le Path
    3. installer le service (l'exe qui se trouve dans le rep bin\debug) en ligne de commande avec installutil
    4. lancer le service dans le gestionnaire de services windows
    5. aller dans VS2005 outils/attacher au processus
    6. pis c'est tout...

    Ben voilà voilà. Merci encore à tous !!!

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

Discussions similaires

  1. Application Service Windows
    Par Neo41 dans le forum Visual C++
    Réponses: 9
    Dernier message: 10/05/2007, 11h22
  2. Comment créer une application Service qui lance un .exe.
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 18/05/2006, 12h37
  3. Inscrire une application service ds le journal d'évènements
    Par laadhar dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 30/01/2006, 22h01
  4. Debug application multi thread
    Par Razowsky dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 19h14
  5. Application Service
    Par SamDaKap dans le forum C++Builder
    Réponses: 7
    Dernier message: 17/02/2003, 20h46

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