2013-12-17 2 views
0

Мне нужно отладить службу Windows, из Visual Studio Я не могу запустить службу, поэтому я использую Installutil.exe.Каков самый простой способ регистрации информации или отладки службы Windows?

Так что после каждой сборки я использую Installutil.exe, но я не могу пойти шаг за шагом в свой код.

  • Использование VS отладчик, чтобы проверить код:

    вы знаете какой-нибудь простой способ сделать?

  • Или записывать какое-либо сообщение в Events, чтобы я мог отслеживать, что происходит?

Благодаря

+0

Я обычно использую некоторые АОП инструмент, как PostSharp для вставки 'Trace.WriteLine' звонки (вы можете сделать это сами тоже). Когда мне нужно устранить неполадки, я настраиваю [Trace Listener] (http://msdn.microsoft.com/en-us/library/4y5y10s7 (v = vs.110) .aspx). – vcsjones

ответ

1

Итак, после каждой сборки я использую Installutil.exe, но я не могу сделать шаг на шаг в моем коде.

Если вы хотите отладить службу в Visual Studio, вы можете сделать следующее.

В Program.cs файле определить:

private static void RunService() 
{ 
    var service = new YourService(); 
    System.ServiceProcess.ServiceBase.Run(service); 
} 

//for debug only 
private static void RunNoService() 
{ 
    using (var service = new YourService()) 
    { 
     service.Start(); 
     System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 
    } 
} 

В Main метод

static void Main() 
{ 
    if (Environment.UserInteractive) //This is IMPORTANT 
     RunNoService(); 
    else 
     RunService(); 
} 

В вашей службы Определите метод Start, который имел бы функции от OnStart, Измените метод OnStart как:

protected override void OnStart(string[] args) 
{ 
    Start(); 
} 

Environment.UserInteractive будет проверять, выполняется ли служба из Visual Studio и позволяет ее отладить.

Для Logging:

Всегда войти вашу активность в службе. Это поможет вам отладить ваш сервис после его производства. Вы можете использовать Log4Net или создать собственный пользовательский класс для ведения журнала. Даже вход в простой текстовый файл будет лучше, чем ничего. Но вы должны вести журнал, иначе это может стать действительно расстраивающим, если что-то пойдет не так в производстве.

1

Для отладки службы в Visual Studio Я использую этот код в проекте Service:

В Program.cs:

static class Program 
    { 
#if DEBUG 
     static AutoResetEvent sare = new AutoResetEvent(false); 
#endif 

     static void Main() 
     { 
#if (!DEBUG)   
      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] { new Service() }; 
      ServiceBase.Run(ServicesToRun); 
#else 
      Service service = new Service(); 
      service.DebugServiceStopped += new Action(SetAutoResetEvent); 

      service.DebugStart(); 

      sare.WaitOne(); 
#endif 
     } 

#if DEBUG 
     private static void SetAutoResetEvent() 
     { 
      sare.Set(); 
     } 
#endif   
    } 

В Service.CS (файл фактического Service класса), необходимо добавить эти части кода:

#if DEBUG 
     public event Action DebugServiceStopped; 
     public void DebugStart() 
     { 
      OnStart(null); 
     } 
#endif 

     protected override void OnStop() 
     { 
#if DEBUG 
      DebugServiceStopped(); 
#endif 
     } 

При выборе Debug в конфигурации в Visual Studio вы сможете отладить Услугу так же, как обычное приложение, в противном случае проект будет скомпилирован как настоящая Служба.

Logging: В Windows есть Windows, журнал события, который используется для хранения информации, предупреждения и ошибки приложений. От службы в журнале событий может быть записано в с:

EventLog.WriteEntry("your log message", EventLogEntryType.Information); // or EventLogEntryType.Error,... depending on the entry type 
Смежные вопросы