служба отладки окон - PullRequest
       24

служба отладки окон

2 голосов
/ 09 августа 2011

Я хочу отладить службу окна. Что я должен написать в main (), чтобы включить отладку в оконном сервисе. Я занимаюсь разработкой оконного сервиса с использованием C #.

#if(DEBUG)
      System.Diagnostics.Debugger.Break();
      this.OnStart(null);
      System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
 #else
      ServiceBase.Run(this);
 #endif

я написал выше сегмент кода, но на линии (это

Ответы [ 5 ]

10 голосов
/ 09 августа 2011

Я лично использую этот метод для отладки службы Windows:

static void Main() {

    if (!Environment.UserInteractive) {
        // We are not in debug mode, startup as service

        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] { new MyServer() };
        ServiceBase.Run(ServicesToRun);
    } else {
        // We are in debug mode, startup as application

        MyServer service = new MyServer();
        service.StartService();
        System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
    }
}

И создаю новый метод в вашем классе MyServer, который будет использовать событие OnStart:

public void StartService() {
    this.OnStart(new string[0]);
}
2 голосов
/ 09 августа 2011

Попробуйте:

#if DEBUG
while (!System.Diagnostics.Debugger.IsAttached)
{
    Thread.Sleep(1000);
}
System.Diagnostics.Debugger.Break();
#endif

Он ждет, пока вы не подключите отладчик, , затем обрывы.

1 голос
/ 09 августа 2011

Проверить этот проект в CodeBlex
Сервисный помощник отладчика

enter image description here

Я пользуюсь этим помощником лично.

1 голос
/ 09 августа 2011

Это может быть тем, что вы хотите сделать

0 голосов
/ 09 августа 2011

Я бы сделал это так:
В методе OnStart вашего сервиса добавьте вызов к Debugger.Break() вверху:

protected override void OnStart(string[] args)
{
    #if DEBUG
        Debugger.Break();
    #endif

    // ... the actual code
}
...