以前書いた記事の続編?というかいろいろですね。
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を使う際のコマンドプロンプトも、管理者権限で起動するのを忘れないことです。
じゃないと、例外になやまされます^^;
なんか、前回の補足になってしまったように思いますが、とりあえず簡単に。