2009-04-15 10 views
3

Каков наилучший способ запуска службы Windows в качестве консоли?Запуск службы Windows на консоли

Моя нынешняя идея - передать аргумент «/ exe» и выполнить работу службы Windows, а затем вызвать Application.Run().

Причина, по которой я делаю это, - это лучше отладить службу Windows и упростить профилирование кода. Служба в основном поддерживает удаленные объекты .NET.

ответ

6

Это, как я это делаю. Дайте мне тот же .exe для консольного приложения и сервиса. Для запуска в качестве консольного приложения ему нужен параметр командной строки -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

Я закончил с этим: ThreadPool.QueueUserWorkItem (состояние => service.DoWork()); новый ManualResetEvent (false) .WaitOne(); Я читал, что использование ThreadPool почти всегда лучше, чем явное создание потоков. –

+0

Использование ThreadPool - хорошая идея. Я бы обычно использовал ThreadPool перед созданием новой темы. В приведенном выше примере я действительно нуждался в большем управлении потоком по какой-то причине, о котором я не могу сейчас вспомнить. – sipwiz

4

На сайте проекта Code был отличный article, показывающий, как запустить службу Windows в отладчике Visual Studio, не требуется консольное приложение.

2

Или

C:\> MyWindowsService.exe /? 
MyWindowsService.exe /console 
MyWindowsService.exe -console 
Смежные вопросы