続・C#のサービスアプリケーション(イベントログ)で悩む

以前書いた記事の続編?というかいろいろですね。

C#でサービスアプリケーションを作っていて思ったことを記載します。

Visual Studio 2012、2013では、サービスインストーラーの追加は、サービスのデザイナーを右クリックして追加します。

また、コンポーネントを追加するときに、EventLogを追加してお手軽にやろうと思ってしまいますが・・・ログの出力先によっては、使わないで自前で書きましょう。なぜかといいますと・・・

ログの出力先がApplicationに固定されてしまったり、InstallUtil.exeでインストールする際に、ログが既にあるとインストールに失敗してしまいます。

一度、これに気づいて、サービスをインストールしてしまい、そのあとで、直してしまうと、InstallUtilで失敗してしまうのです。
すでに別のログで登録されてしまっていると・・・

その場合、一度削除してあげないとなりません。

自前で書く場合ですが・・・Service1.csで、まずはEventLogのSourceが存在するかを判定し、なければ作るようにします。

   1: if (!System.Diagnostics.EventLog.SourceExists("Brichan DDNS Client Service"))
   2: {
   3:     System.Diagnostics.EventLog.CreateEventSource(
   4:         "Brichan DDNS Client Service", "Brichan DDNS Client Service Log");
   5: }

Source名は、サービスを識別、Logはイベントビューアーでのログの出力先です。
Logに”Application”または、空を指定すれば、イベントログのアプリケーションに出力されます。
ここに、任意の名称を入力することで、イベントビューアーのアプリケーションとサービスログに追加することができます。
ここでは使用してませんが、MachineNameには出力するコンピュータ名を入れます。”."(どっと)はローカルコンピューターを表します。

ログを書き出したい場合は、

EventLog.WriteEntryメソッドで出力します。
EventLog.WriteEntry(Source,Message,Type)などを使います。

ここで忘れてならないのは、UAC制御ですね。管理者権限でVisual Studioを起動しておいたほうが何かと便利ですし、InstallUtilを使う際のコマンドプロンプトも、管理者権限で起動するのを忘れないことです。

じゃないと、例外になやまされます^^;

なんか、前回の補足になってしまったように思いますが、とりあえず簡単に。

コメントを書く

Month List