ディレクトリを監視するWindowsサービスを作成しました。ファイルがダンプされると、データが取得され、データベースに配置されます。次に、このファイルを別のディレクトリに移動して削除します。デバッグモードでは正常に動作します。しかし、コンピューターにインストールすると、データをデータベースに投入した後に停止し、問題のファイルは移動も削除もされません。許可の問題が関係していると思われます。イベントログを作成しようとしました:
public Service1()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("MySource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"MySource", "MyNewLog");
}
eventLog1.Source = "MySource";
eventLog1.Log = "MyNewLog";
}
だから私は3つの質問があります。(1) サービスがデバッグで説明されているように動作するのに、コンピューターにインストールすると失敗する原因は何ですか。(2) 上記のようにイベント ログを開始しました。しかし、サービス停止のイベントを記録するために他のコードを追加する必要がありますか? これは「onShutdown のオーバーライド」メソッドで行われると思います。(3) 最後に、サービスが停止したら、イベント ログを確認します。しかし、これを行う方法がわかりません。管理ツールにありますか? ディレクトリにファイルとして保存されますか?
以下に示す感謝のアドバイスの代わりに、この投稿を編集します。
try
{
File.Move(e.FullPath, finalString);
File.Delete(e.FullPath);
}
catch(Exception q)
{
EventLog.WriteEntry("MySource", q.ToString(), EventLogEntryType.Error);
using (StreamWriter w = new StreamWriter(ConfigurationManager.AppSettings["fmd"], true))
{
w.Write(DateTime.Now.ToString("dd-MM-yyyy_hh-mm-ss"));
w.Write(q.ToString());
}
}
提案に従って、ファイルの移動と削除に try-catch を配置し、さらに OnShutdown メソッドを追加しました。
protected override void OnShutdown()
{
using (StreamWriter w = new StreamWriter(ConfigurationManager.AppSettings["ond"], true))
{
w.Write("stop OnShutdown");
}
//EventLog.WriteEntry("MySource", message, EventLogEntryType.Error);
}
システムエラーメッセージをシャットダウンメソッドに渡す方法がわからないので、アドバイスをいただければ幸いです。変更したコードをサービスとしてインストールすると、ファイルを移動または削除する前に再び停止しました。ストリームによってアクセスされた 2 つのログはどちらも何も記録しませんでした。さらに、イベントビューアにも何も表示されませんでしたか?