3

カスタム イベント ログ (Windows イベント ビューアー) にデータを書き込むカスタム Windows サービスを作成しました。

サービスが使用するビジネス ロジックを開発するために、Windows サービスの Start/Stop メソッドをシミュレートする Windows フォームを作成しました。

Windows フォーム経由でビジネス ロジックを実行すると、カスタム イベント ログに情報が正常に書き込まれます。ただし、カスタム Windows サービスから同じビジネス ロジックを実行すると、情報がイベント ログに書き込まれません。

明確にするために、カスタム サービスに実行させたいすべての作業 (カスタム イベント ログの作成/書き込みを含む) を実行するライブラリ (.dll) を作成しました。フォーム アプリケーションは、Windows サービスと同様にこのライブラリを参照します。

問題はセキュリティ上の問題だと考えて、カスタム Windows サービスを手動で「管理者」として「ログオン」するように設定しましたが、サービスはまだイベント ログに書き込みませんでした。

サービスを実行するときにデバッグしてコードにステップインすることができないため、この問題のトラブルシューティング方法にも行き詰まっています (サービスをデバッグする方法がある場合は、共有してください)。

サービスがイベント ログへの書き込みに失敗する原因について何か考えはありますか?

4

3 に答える 3

2

こんな感じで使っています。いくつかのタイプミスがある可能性があります。私の電話ブラウザにそれを書きました...

public class MyClass
{
   private EventLog eventLog = new EventLog();

   public void MyClass()
   {
      if (!System.Diagnostics.EventLog.SourceExists("MyLogSource"))
          System.Diagnostics.EventLog.CreateEventSource("MyLogSource", "MyLogSource_Log");
      eventLog.Source = "MyLogSource";
      eventLog.Log = "MyLogSource_Log";
   }

   private void MyLogWrite()
   {
       eventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error);
   } 

}
于 2012-06-26T18:26:17.283 に答える
1

実行中のサービスをデバッグするには、プロセスにアタッチする必要があります。手順はこちらをご覧ください。

また、パラメーター チェックを Main エントリ ポイントに追加し、サービスとコンソール アプリを組み合わせて、何らかのフラグに基づいて開始することもできます。良い例については、この SO 投稿を参照してください。ただし、ここにスニペットがあります。

using System;
using System.ServiceProcess;

namespace WindowsService1
{
    static class Program
    {
        static void Main(string[] args)
        {
            if (args == null)
            {
                Console.WriteLine("Starting service...");
                ServiceBase.Run(new ServiceBase[] { new Service1() });
            }
            else
            {
                Console.WriteLine("Hi, not from service: " + args[0]);
            }
        }
    }
}

上記は、パラメーターが存在する場合はコンソール モードでアプリを起動し、パラメーターが存在しない場合はサービス モードでアプリを起動します。もちろん、もっと手の込んだものにすることもできますが、それがスイッチの要点です。

于 2012-06-26T18:13:22.393 に答える
0

サービスがイベント ログに書き込みを行っていない理由を発見しました。

この問題は、EL に書き込もうとしていたコード/セキュリティ/その他の部分とは何の関係もありませんでした。問題は、私のサービスが EL に書き込まれる情報を正常に収集していないことでした。そのため、サービスはログを書き込もうとさえしていませんでした。

データを収集するコードを修正したので、データはイベント ログに正常に書き込まれます。

質問が実際の問題に不適切だったため、この質問を閉じてもかまいません。

于 2012-06-26T19:22:13.053 に答える