2010-12-07 7 views
-1

J'ai créé un service Windows qui envoie une notification par e-mail aux utilisateurs (liste récupérée depuis db) toutes les 2 minutes. Je souhaite vérifier que tout fonctionne correctement dans le service web et donc je souhaite déboguer le service. Le service est installé dans SMC (services.msc) lorsqu'une configuration de serveur d'application est effectuée.Débogage d'un service Windows

Ma question: comment déboguer le service Windows?

Je ne peut pas voir le service de

  1. Gestionnaire des tâches
  2. Fixer pour traiter

J'ai essayé de suivre les liens

J'ai aussi donné les droits de mise au point de http://msdn.microsoft.com/en-us/library/aa291232%28VS.71%29.aspx#vxtskdebuggerpermissionsdebuggingasystemservice

Permettez-moi de savoir si une entrée nécessaire.

Merci!

EDIT: @maycil

J'ai écrit votre code If(!Debug) mais je suppose qu'il ya un problème que je ne vois pas la bonne couleur de Visual Studio.

alt text

+0

Système d'exploitation? – Aliostad

+0

Vous pouvez l'exécuter en tant qu'application de console puis déboguer cela .. autant que je sache, il n'est pas possible de déboguer directement du code s'exécutant en tant que Service. http://tech.einaregilsson.com/2007/08/15/run-windows-service-as-a-console-program/ –

+2

Avez-vous coché la case "Afficher les processus dans toutes les sessions" dans la fenêtre Attacher au processus? – jvanrhyn

Répondre

1
static void Main() 
{ 
#if (!DEBUG) 


      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] { new Service1Component() }; 
      ServiceBase.Run(ServicesToRun); 


#else 
      Service1Component s = new Service1Component(); 
      s.StartProcess(); 
#endif 
} 

essayer ce code dans Service1Companent.cs

+0

merci pour le commentaire. ne peut pas trouver le StartProcess lors de l'écriture du code. –

+0

ce sera votre code privé, vous pouvez l'appeler en mode prioritaire protégé OnStart (string [] args) méthode – maycil

2

Le long des lignes de la réponse de maycil vous pouvez utiliser Environment.UserInteractive pour vérifier si le service est en cours d'exécution avec une console connectée. De cette façon, il fonctionne comme pour un service et pour le débogage comme une application de console.

static void Main(string[] args) 
{ 
    if(!Environment.UserInteractive) 
    { 
     var servicesToRun = new ServiceBase[] {new Service1Component()}; 
     ServiceBase.Run(servicesToRun); 
    } 
    else 
    { 
     var services = new Service1Component(); 
     services.Start() 
     Console.WriteLine("Press return to exit"); 
     Console.ReadLine(); 
     services.Stop(); 
    } 
} 
+0

+1 Je préfère cette méthode à '# DEBUG' parce que cela fonctionne indépendamment de la façon dont le projet a été construit. –