2008年2月6日水曜日

onShutdownは動いてる。

C#でサービスプログラムを作成したのだが
onShutdownイベントが動かないと丸一日
悩んだあげく、結論は動いていました。
ということで、メモ


protected override void OnShutdown()
{
EventLog.WriteEntry("Shutdown!",
"OnShutdown()",
EventLogEntryType.Warning);
}


というなんでもないコードを書いて、Windowsを
何度もシャットダウンし、イベントログを覗いて
見たが、何も出力されてない。

さらにインストーラに

serviceInstaller1.ServicesDependedOn
= new string[] {"Event Log"};

を付け加えてイベントログに依存関係をもたせたりしたが
なにも変化がなかった。

それで、海外でたまたま見かけた
メーリングリストにファイルに書き出せ
みたいなことが書いてあったので
最初のコードに

using (StreamWriter sw = new StreamWriter("TestFile.txt"))
{
sw.Write("Shutdown!");
}

を付け加えてシャットダウンしたら見事
ファイルが吐き出されてました。

つまり、シャットダウン時にはイベントログも
シャットダウンされてしまい出力されない。
ということでした。

なんか釈然としません。

シャットダウン時でも出力できますよ。
と言う方がいましたらご一報くだされば幸いです。

環境:vs2003 /.net1.1

2 件のコメント:

tadadpon さんのコメント...

はじめまして。OnShutdown()のことをしらべていたらこのブログにたどりつきました。

OnShutdown()・OnStop()でイベントログにかきこみすることをためしてみました。

OnStop()ではイベントログにかきこみができましたが。

OnShutdown()ではSystem.InvalidOperationExceptionが発生してしまいました。どうやらイベントログのサービスがさきにいなくなってしまって、書き込みにシッパイしているようです。

MSDNにはそのようなことかかれてなかったのでブログが参考になりましたありがとうございます。

Hawkeye さんのコメント...

tadaponさん。
こんにちは。
自分の悩みで、誰かが
助かれば、これほどうれしい
ことはありません。
少しでも、力になれたのなら
何よりです。