Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CrazyHT Blog

Ex-MVP C#.NET
Débogage d'un Service Windows en .NET

A l'occasion d'un projet, j'ai du faire un peut de débogage sur une appli de type Service Windows déjà existante. Et comme le code UI (si on peut l'appeler comme ca) et le code métier étaient imbriqués, il m'a fallu trouver une solution simple me permettant de lancer le tout sous VS.NET sans me compliquer la vie.

Habituellement, quand les 2 parties sont bien séparées dans des assembly distincts, il suffit de faire un petit projet type WinForms ou Console et d'y instancier le code métier (en gros un copier/coller de la fonction OnStart du service dans le Main de l'appli console.)

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

 

Et voila du coup, après quand vous lancer votre projet en mode Debug, une fenêtre apparait. Alors qu'en mode Release le service ne peut être lancer que par le service manager de NT (2000/XP/2003).

 

Attention tout de même, cette astuce permet de debugger facilement un service, mais le programme n'est pas lancer par le même compte utilisateur. Il vous restera donc peut-être des problème de droits d'accès.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: vendredi 22 avril 2005 14:31 par crazyht
Classé sous :

Commentaires

TrackBack a dit :

D
# août 4, 2005 04:44
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- WPF : la gestion des dates (Label, TextBlock) par Pierrick's Blog le il y a 3 heures et 33 minutes

- [ASP.NET] - ASP.NET Generated Image par Aurelien's Blog - When ClientSide meets .Net le il y a 5 heures et 1 minutes

- Utiliser le SDK Open XML pour manipuler vos documents Office Open XML par Julien Chable le il y a 6 heures et 14 minutes

- [Silverlight] - Créer un contrôle réutilisable et des propriétés personnalisées. par Danuz le il y a 9 heures et 32 minutes

- Photosynth : Composez et partagez vos scènes ! par Blog technique de Nicolas Boonaert le il y a 9 heures et 35 minutes

- Comment débugger un programme de génération de code utilisé dans VS ? par Matthieu MEZIL le il y a 9 heures et 36 minutes

- Avoir une propriété sur l'object context qui renvoit les sous-entités par Matthieu MEZIL le il y a 9 heures et 48 minutes

- Sortie du SDK 1.1 de Visual Studio 2008 par Michel Perfetti [Miiitch] le il y a 12 heures et 22 minutes

- Skyfire, Silverlight sur votre mobile ! par alex# le il y a 12 heures et 39 minutes

- VSTSDB 2008 GDR CTP16 est arrivé par Noham Choulant le il y a 13 heures et 43 minutes