begin process at 2012 02 09 01:16:47
  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 :19 373

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 Zip Source .NET (Dotnet) DIFFÉRENTIELLE ENTRE DEUX COLLECTION par morphey_83
Source avec Zip Source avec une capture Source .NET (Dotnet) RICHTEXTBOX POUR COLORATION SYNTAXIQUE EN TEMPS REEL par Renfield
Source avec Zip Source avec une capture Source .NET (Dotnet) TRANSFORMER UN PROGRAMME EN SERVICE par xavh44
Source avec Zip Source .NET (Dotnet) [C# ET T4] TEMPLATE DE VIEW MODEL POUR LE PATTERN MVVM par Kite37
Source .NET (Dotnet) EXEMPLE D'UTILISATION D'UN OCX SANS DECLARATION PREALABLE DA... par yohan49

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) TRANSFORMER UN PROGRAMME EN SERVICE par xavh44
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPLORATEUR DE REGISTRE WINDOWS par thebestdrummer
Source avec Zip Source .NET (Dotnet) SERVERTIMER: AUTOMATISER LES TÂCHES DE REDÉMARRAGE D'UN SERV... par codergamer
Source avec Zip Source avec une capture Source .NET (Dotnet) SERVICES WINDOWS par thebestdrummer
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES SERVICES WINDOWS par boutemine

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

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 4,446 sec (3)

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