4

オンラインで調査して見つけた、Windows サービスをログに記録するための次のコードがあります。以下のように初期化される直前に、サービスクラス内で行われます。

public GBBInvService()
        {
            InitializeComponent();
            if (!System.Diagnostics.EventLog.SourceExists("MyLogSource"))
                System.Diagnostics.EventLog.CreateEventSource("MyLogSource",
                                                                      "MyDoLog");
            eventLog1.Source = "MyLogSource";
            eventLog1.Log = "MyDoLog";
        }

ロギング時のコード:

eventLog1.WriteEntry("GBBInvService Service Started");

しかし、私はコンサルタントから反対のアドバイスを受けました。以下の彼のコメント:

サービスが実行時にイベント ソースを作成することは避けたいと思います。これには、サービスを高い特権で実行する必要があります (つまり、実際に必要な以上のコンピューターへのアクセス)。Windows イベント ログ ソースの設定は、実際にはインストール時の作業です。イベント ログ インストーラーをプロジェクト インストーラー ファイルに (サービス インストーラーと共に) 追加すると、イベント ソースが常に存在します。

このアドバイスの問題点は、プロジェクト インストーラー ファイルでログが作成される例を見つけることができなかったことです。また、このログ作成部分をプロジェクト インストーラーに移動しようとしましたが、web サービスの cs ページから eventlog1 を呼び出したり、書き込んだりできません。彼は log4net も提案しましたが、それは私にとって初めてのことであり、把握するのはかなり複雑です。私は最初の Windows サービス プロジェクトを完了したばかりで、まだ Windows サービスに非常に慣れていません。プロジェクト インストーラーでログを作成したり、サービスの cs ページからログに書き込んだり、log4net で頭を上げたりするためのあらゆる種類の指示に非常に感謝しています。

4

1 に答える 1

6

あなたのコンサルタントは正しいです。サービス内でそれを行うのは悪い考えです.

インストーラーでイベント ソースを作成する方法は次のとおりです。

http://blogs.msdn.com/b/helloworld/archive/2008/12/11/creating-an-event-log.aspx?Redirected=true

短いバージョン: インストーラーをサブクラス化し、サブクラス化されたインストーラーのコンストラクターでイベント ログ ソースを作成します。

アップデート

リンクから:

サービス インストーラーの実行後、ログは「登録」されますが、まだ作成されていません。それを作成するには、1 つのイベントを書き込む必要があります。制限されたユーザー アカウントを使用してサービスを実行する場合、ログを作成する必要があるため、そのアカウントには最初のログを書き込むための十分なセキュリティ アクセス許可がない可能性があります。

サンプル コードでは、1 つのイベントが書き込まれているわけではありません。あなたがそれをしていることを確認してください。

サービスをインストールするとき、ユーザーはインストーラーを管理者として実行する必要があります

インストーラーを管理者として実行したことを確認してください。

あなたのコメントから:

サービスが開始されませんでした。

起動していない理由については、イベント ログを参照してください。たとえば、インストーラーに 1 つのイベントを記述していない場合や、インストーラーを管理者として実行していない場合など、例外がスローされている可能性があります。

于 2013-03-20T23:59:45.757 に答える