2016-05-12 13 views
0

昨日、services.mscに表示されるように、実行可能ファイルC:\Users\urban\Documents\Visual Studio 2013\Projects\TestService\obj\Release\TestService.exeをWindows 10のサービスとしてインストールしました。私はそれを開始し、エラーメッセージは次のようでした。Windowsサービスが開始してから停止しましたが、ログはありません

ローカルコンピュータ上の「サービス名」サービスが開始されて停止しました。一部のサービスは、他のサービスまたはプログラムによって使用されていない場合、自動的に停止します。

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から、それを開始しようとしました:私のコードは次のようになりますように

今日は、私は、...キャッチをVSに戻って、EventLogに追加してみてください。エラーメッセージは依然として同じですが、サービスが開始され、エラーがスローされたことを少なくとも記録することが期待されます。しかし、ナダ。サービスを開始する前にイベントビューアの「アプリケーション」プロトコルをクリアしましたが、その間に追加されたいくつかのログは私のサービスからのものではありません。

ここでは何が起こっていますか?

+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)を見て、これらの手順を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!"); 

単にそれを書く、それを使用私のロガーです。エラー/理由を特定することができます。

関連する問題