インストーラで Windows イベントログのソースを作成

初めて Windows サービスを作ってみたのですが、イベントログを出力しようとすると SecurityException とかが出て、うまく書き込めませんでした。

いろいろ調べてみて、以下のようなことがわかりました。

  • イベントソースを新規作成するには管理者権限が必要
  • イベントログに書き込むのに管理者権限は必要ない

私の場合、存在しないイベントソースを指定して書き込もうとしていたため、イベントソースを新規作成しようとして、権限が足りなくてエラーになっていたようです。

で、どうすれば良いかというと、イベントログに出力するアプリケーションの場合、インストール時にイベントログのソースを作成してしまうと良いとのことでした。

Visual Studio のセットアッププロジェクトを使ってみたところ、ノンコーディングで全部行うことができましたので、その手順を紹介します。

インストーラクラスを追加

開発中のアプリケーションのプロジェクトに、項目の新規追加で、インストーラクラスを追加します。

20160206-01

EventLogInstaller コンポーネントを追加

ツールボックスからドラッグ&ドロップで追加します。

20160206-04

なお、初期設定では EventLogInstaller はツールボックスにいないので、ツールボックスを右クリック→アイテムの追加で、先に追加してください。

EventLogInstaller のプロパティを設定

追加した EventLogInstaller を選択し、プロパティウィンドウで、必要なプロパティを設定します。通常は以下の2つを設定すればよいです。ただし、なぜか Source を先に設定するとおかしくなるので、Log を先に設定した方が良いようです。

プロパティ 設定値
Log “Application”
Source イベントログのソース名(通常はアプリケーションの名前)

インストーラにカスタムアクションを追加

セットアッププロジェクトを右クリックし、[View] – [カスタム動作] を選択します。カスタム動作のタブで [Install] を右クリックして、[カスタム動作の追加] を選択します。

20160206-05

さらに、[Application Folder] – [プライマリ出力 from アプリケーション名] を選択し、OKを押します。同様に、Uninstall にもプライマリ出力を追加します。

20160206-06

手順は以上です。これでインストール時に Source で指定した名前のイベントログソースを作成してくれますので、アプリケーションからその Source を指定して、イベントログに書き込めばOKです。


Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">