2009-04-15 8 views
3

Quelle est la meilleure façon d'exécuter un service Windows en tant que console?Exécution d'un service Windows dans une console

Mon idée actuelle est de passer un argument "/ exe" et de faire le travail du service windows, puis d'appeler Application.Run().

La raison pour laquelle je fais cela est de mieux déboguer un service Windows et de faciliter le profilage du code. Le service héberge essentiellement des objets distants .NET.

Répondre

6

Voilà comment je le fais. Donnez-moi le même .exe pour l'application console et le service. Pour démarrer en tant qu'application de console, il nécessite un paramètre de ligne de commande de -c.

private static ManualResetEvent m_daemonUp = new ManualResetEvent(false); 

[STAThread] 
static void Main(string[] args) 
{ 
    bool isConsole = false; 

    if (args != null && args.Length == 1 && args[0].StartsWith("-c")) { 
     isConsole = true; 
     Console.WriteLine("Daemon starting"); 

     MyDaemon daemon = new MyDaemon(); 

     Thread daemonThread = new Thread(new ThreadStart(daemon.Start)); 
     daemonThread.Start(); 
     m_daemonUp.WaitOne(); 
    } 
    else { 
     System.ServiceProcess.ServiceBase[] ServicesToRun; 
     ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service() }; 
     System.ServiceProcess.ServiceBase.Run(ServicesToRun); 
    } 
} 
+0

J'ai fini avec ceci: ThreadPool.QueueUserWorkItem (state => service.DoWork()); new ManualResetEvent (false) .WaitOne(); J'ai lu que l'utilisation de ThreadPool est presque toujours préférable à la création explicite de threads. –

+0

L'utilisation de ThreadPool est une bonne idée. J'utiliserais généralement le ThreadPool avant de créer un nouveau Thread. Dans l'exemple ci-dessus, je voulais plus de contrôle du fil pour une raison que je ne peux pas rappeler maintenant. – sipwiz

4

Le site de projet de code avait un grand article montrant comment exécuter un service Windows dans le débogueur Visual Studio, aucune application de console nécessaire.

2

Ou

C:\> MyWindowsService.exe /? 
MyWindowsService.exe /console 
MyWindowsService.exe -console 
Questions connexes