2010-12-14 13 views
1

私は、何もしないでC#でWindowsサービスを作成し、インストールし、正常に開始しました:)最初はコンソールにecho stuffを、dbにサービスを照会したいなどとしました。サービスを開始しますが、これらのメッセージはどこに表示されるのですか?c#WindowsサービスConsole.Writeln

私はより良い方法に開かれています。私はこれを初めて知り、私の進歩をコンソールにエコーバックすることで、ステップごとに自分の道を感じています。代わりにイベントログにエコーする必要がありますか?私はそれをどのように行うのですか?(私が知っている、私が知っている、それをグーグル)

protected override void OnStart(string[] args) 
    { 
     base.OnStart(args); 
     Console.WriteLine("Sham-Wow!"); 
    } 
+0

なぜGoogleにならないのですか? – bevacqua

+3

@ニコ:Stackoverflowは "go go it"とRTFMを奨励していません。このサイトはFAQにも答える予定です。私に思い出させるのは、C#FAQですか? –

+0

RTFM、聞いたことがありません。どのような素晴らしい頭字語。 – rd42

答えて

6

Windowsサービスからコンソールを書き込むことはできません。

log4netなどのログユーティリティを使用することをお勧めします。

コンソールアプリケーションとして(そう、あなたのコンソール出力を見ることができる)か、以下でこれを達成することができ、サービスとしてアプリケーションを実行したい場合は、2番目の選択肢はEvent LogSystem.Diagnostics.EventLog

+0

名前空間にも感謝します! – rd42

3

System.Diagnostics.Trace.WriteLineを試してみて、あなたは、Visual Studioの[出力]ウィンドウまたはDBGVIEWユーティリティを使用してあなたのメッセージが表示されます。

3

に書き込みを行っています:

  • アプリケーションがコンソールアプリケーションとしてコンパイルされていることを確認してください。
  • サービスまたはコンソールの実行のために分岐できるように、アプリケーションのMainメソッドを変更します。
  • 次のようにアプリケーションを実行して、コンソール "myservice.exe/console"を取得します。

私はこれがそう少し調整が必要になる場合があります行っていることから、何かを次のようにそれは年をされている:

static void Main(string[]] args) 
{ 
    if (args.Length == 0) 
    { 
      //Service entry 
      System.ServiceProcess.ServiceBase[] services; 
      services = new System.ServiceProcess.ServiceBase[] { new WinService1() }; 
      System.ServiceProcess.ServiceBase.Run(services); 
    } 
    else 
    { 
      //Console entry 
      OnStart(args); 
    } 
} 

protected override void OnStart(string[] args) 
{ 
    base.OnStart(args); 
    Console.WriteLine("Sham-Wow!"); 
} 

これは、いくつかの初期の実験のための罰金ですが、あなたが得た後、私はlog4netのをお勧めします物事の周りにあなたの頭。

1

サービスのステータスを伝える最も一般的な方法は、Windowsイベントログに書き込むことです。

デバッグを簡単にするために、すべてのビジネスコードをサービスコンポーネントとは別のクラスに入れることをお勧めします。その後、サービスまたはコンソールアプリケーションからそのクラスを使用できます。サービスを作成している間は、コンソールアプリケーションを使用してコンポーネントをホストするので、コードに簡単に入ることができます。