2016-05-12 3 views
0

Вчера я установил исполняемый файл C:\Users\urban\Documents\Visual Studio 2013\Projects\TestService\obj\Release\TestService.exe в качестве службы в Windows 10, так что теперь он отображается в services.msc. Затем я начал его, и сообщение об ошибке было похоже наСлужба Windows запущена, а затем остановлена, но нет регистрации

Служба «имя службы» на локальном компьютере началась, а затем остановлена. Некоторые службы автоматически останавливаются, если они не используются другой службой или программами.

Сегодня я вернулся в VS и добавил EventLog и попробовать ... поймать, так что мой код теперь выглядит следующим образом:

internal class TestService : ServiceBase 
{ 
    Thread Worker; 
    AutoResetEvent StopRequest = new AutoResetEvent(false); 
    Toolkit toolkit; 

    protected override void OnStart(string[] args) 
    { 
     try { 
      EventLog.Log = "Application"; 
      EventLog.Source = "TestService"; 
      EventLog.WriteEntry("Starting Test Service", EventLogEntryType.Information); 
      var User = System.Security.Principal.WindowsPrincipal.Current; 
      toolkit = new ServiceToolkit(User); 
      Worker = new Thread(DoWork); 
      Worker.Start(); 
     } 
     catch (Exception e) 
     { 
      EventLog.WriteEntry(e.GetType().Name + ": " + e.Message, EventLogEntryType.Error); 
      throw; 
     } 
    } 

Я собирал его и попытался запустить его из services.msc. Хотя сообщение об ошибке все равно одно и то же, я ожидаю, что служба хотя бы регистрирует, что она была запущена, и какая ошибка была выбрана. Но нада. Перед отправкой службы я очистил протокол приложения «Приложение», и несколько журналов, которые были добавлены в то же время, не являются моей службой.

Что здесь происходит?

+0

ознакомьтесь с https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx (Пошаговое руководство: создание службы Windows) – Jan18101997

+0

'ServiceBase [] ServicesToRun; TestService ts = new TestService(); ts.AutoLog = true; ServicesToRun = новый ServiceBase [] {ts}; ServiceBase.Run (ServicesToRun); ' –

+0

посмотрите [youtube] (https://www.youtube.com/watch?v=uM9o8GsO_u4) и выполните эти шаги, как создать службу Windows в C#. Я получил эту же ошибку после просмотра этих шагов. Моя ошибка исчезла. –

ответ

1

Если все события Источники известны во время установки службы, я предлагаю вам заранее зарегистрировать эти источники, тогда вы сможете получить записи журнала. В таких случаях вы можете создать свой собственный простой регистратор, который будет гибким, чтобы указать указанные вами журналы.

вот мой регистратор я использую мои услуги

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

    namespace TestWindowService 
    { 
     public static class MyLogger 
     { 
      public static void WriteErrorLog(Exception ex) 
      { 
       StreamWriter sw = null; 
       try 
       { 
        sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\LogFile.txt", true); 
        sw.WriteLine(DateTime.Now.ToString() + ": " + ex.Source.ToString().Trim() + "; " + ex.Message.ToString().Trim()); 
        sw.Flush(); 
        sw.Close(); 
       } 
       catch 
       { 
       } 
      } 

      public static void WriteErrorLog(string Message) 
      { 
       StreamWriter sw = null; 
       try 
       { 
        sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\LogFile.txt", true); 
        sw.WriteLine(DateTime.Now.ToString() + ": " + Message); 
        sw.Flush(); 
        sw.Close(); 
       } 
       catch 
       { 
       } 
      } 
     } 
    } 

и я использую его просто

MyLogger.WriteErrorLog("Test window service started!"); 

Просто напишите, когда служба остановлена. Вы можете определить ошибку/причину.