2016-05-12 134 views
0

昨天,我在Windows 10中安装了可执行文件C:\Users\urban\Documents\Visual Studio 2013\Projects\TestService\obj\Release\TestService.exe作为服务,以便它现在显示在services.msc中。然后我启动它,错误信息就像Windows服务已启动,然后停止,但没有记录

本地计算机上的“服务名称”服务启动然后停止。有些服务如果未被其他服务或程序使用,则会自动停止。

今天,我回到了VS,并添加事件日志和的try ... catch,让我的代码现在看起来像这样:

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 = new ServiceBase [] {ts}; ServiceBase.Run(ServicesToRun);' –

+0

看看[youtube](https://www.youtube.com/watch?v=uM9o8GsO_u4)并且流程如何在c#中创建Windows服务。在观看这些步骤后我收到了同样的错误我的错误消失了。 –

回答

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!"); 

只需将它写。您可以识别错误/原因。