begin process at 2010 02 10 12:42:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > DEBUGAGE D'UN SERVICE WINDOWS

DEBUGAGE D'UN SERVICE WINDOWS


 Information sur la source

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Source .NET ( DotNet ) Classé sous :debug, debugage, service, windows, serviceprocess Niveau :Initié Date de création :22/04/2005 Vu :16 333

Auteur : Crazyht

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

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

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


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) BRIQUE DE LOG
Source avec Zip Source .NET (Dotnet) ACCÉS A DES PARTAGES RÉSEAUX AVEC UN LOGIN/PWD
Source avec Zip Source .NET (Dotnet) DPAPI : PROTECTION DES DONNÉES PAR UTILISATEUR OU MACHINE
Source avec Zip Source .NET (Dotnet) IPBOX : SAISIE D'ADRESSE IP
Source avec Zip Source .NET (Dotnet) FONTCOMBOBOX : COMBO DE SELECTION DE LA FONT

 Sources de la même categorie

Source avec une capture Source .NET (Dotnet) AJOUTER DES BYTES À UN EXECUTABLE par t0fx
Source .NET (Dotnet) COPIER/ COLLER DATAGRID (COPY/PASTE) par jamesbidon
Source avec Zip Source .NET (Dotnet) MECANISME DE SYNCHRONISATION DE THREAD - MONITOR, MUTEX, SEM... par jesusonline
Source .NET (Dotnet) EVENTHANDLERS GÉNÉRIQUES par ricklekebekoi
Source avec Zip Source .NET (Dotnet) TRAITER UN FOREACH EN PARALLÈLE par maitredede

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) SERVICES WINDOWS par thebestdrummer
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES SERVICES WINDOWS par boutemine
Source avec Zip Source avec une capture Source .NET (Dotnet) FROSTSHELL 1 (SHELL REPLACEMENT) par Elxior
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION BASE DE CONNAISSANCE / CONCEPTION 3 TIERS par thiosyiasar

Commentaires et avis

Commentaire de sebmafate le 22/04/2005 15:46:24 administrateur CS

sympa l'idée... mais fallait y penser :D

Commentaire de lidybekham07 le 25/05/2009 14:01:16

salut g essayer de transposer la solution sur mon code pour essayer de debuguer mon service qui n'arrete pas de me donner (erreur 1067: le service c arreter inopinémént, qui se produit lorsque j'essaye de le démarrer) le pbme c que je ne peut pas utiliser les instructions m_serv.OnStop() et m_serv.OnStart() parcequ'elles sont protected (et on ne peux pas changer ça car se sont des méthode overloaded) donc si vous avez une solution !

Commentaire de Crazyht le 25/05/2009 22:27:48 administrateur CS

Salut Lidybekham07,

Me suis apercu du probleme en VS 2008 la semaine derniere, je n'ai pas encore eut le temps de poster un correctif. Cependant la solution la plus simple est de creer des methodes public equivalentes au OnStart, OnStop et compagnie dans la classe du service en y placant le code des dites methodes puis les appeler dans les methodes On.... et dans le code de Debug.

Bon Code,
CrazyHT

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[C#] Windows Service [ par scoubidou944 ] Ayant un objet:ServiceController m_oService; On a :m_oService.Start ();m_oService.Stop (); que l'on peut tester avec :m_oServic Service Windows [ par RM50Man ] J aimerai savoir a quoi sert un service windows!!!!!!!!!!RM50man FileSystemWatcher ou Service Windows ? [ par zigxag ] Bonjour,vous qui êtes balaise dans le domaine, j'aurais un avis à vous demander.Je dois surveiller régulièrement un fichier conten Service Windows [ par RegVB ] Bonjour à toutes et à tous,J'ai créé un service Windows à l'aide des tutoriaux du MSDN et de CSharpFR mais j'ai certaienment Erreur dans un service Windows [ par titi66 ] Bonjour j'ai developpé un service Window, qui fonctionne très bien sur mon poste. Par contre quand je l'installe sur le poste définitf il refuse de service windows multiprocesseur [ par petitou ] Bonjour à tous,J'ai une application client/serveur qui utilise actuellement les WebServices. Le serveur est IIS et la machine possède 4 proc Windows Service Icon [ par edokt ] Salut J'ai creé un service windows. Comment faire pour metre un icon dans le System Tray quand le service est demaré Merci Service Windows [ par edokt ] Bonjour j'ai creé un service windows en C# Est ce que c'est  possible de creer un packet d'installation qui install ce service ? Je veu HELP : Mon service Windows ne démarre pas automatiquement. [ par mcjonnes ] Bonjour,J'ai ecrit un service Windows qui vérifie la présence d'un process toutes les secondes et qui execute une fonction si ce process exi Installation service Windows [ par boutonk ] Bonjour a tous,Une question assez urgente: Comment fait-on pour installer un service windows créé en c# sur un pc qui ne possede pas d'invit


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales