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

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21

- SharePoint : Incompatibilité avec Internet Explorer 10 (IE10) par Blog Technique de Romelard Fabrice le 05-08-2013, 16:29

- AutoSPInstaller pour SharePoint 2013 maintenant disponible en “RTM” par Julien Chable le 05-06-2013, 23:30

- [TFS2010] A la recherche du Shelveset perdu par Blog de Jérémy Jeanson le 05-03-2013, 21:46

- .NET / Debug post-mortem : obtenir le fichier mscordacwks.dll correspondant à un dump quand on n'a plus d'accès direct à ce fichier par CoqBlog le 04-28-2013, 19:57

- [W8] Afficher un graphe par CPU dans le gestionnaire des tâches par Blog de Jérémy Jeanson le 04-28-2013, 17:48

- [WCF] Limiter proprement l’accès à vos ressources serveur par Blog de Jérémy Jeanson le 04-26-2013, 22:59

- Event : Je serai speaker à la Conf’SharePoint par Blog Technique de Romelard Fabrice le 04-26-2013, 12:00