Debugage d'un service windows

Contenu du snippet

A l'occasion d'un projet, j'ai du faire un peut de debuggage 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 metier etaient 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 separée dans des assembly distincts, il suffit de faire un petit projet type WinForms ou Console et d'y instancier le code metier (en gros un copier/coller de la fonction OnStart du service dans le Main de l'appli console.)

Source / Exemple :


//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

Conclusion :


Et voila du coup, aprés quand vous lancer votre projet en mode Debug, une fenetre apparait. Alors qu'en mode Release le service ne peut etre 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 meme compte utilisateur. Il vous restera donc peut-être des problème de droits d'accès.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.