- PR -

FileSystemWatcherの監視期限について

1
投稿者投稿内容
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2005-07-14 10:06
お世話さまです。

VS.NET2003(VB)でサーバーのファイルを監視するプログラム
を作成し、サーバ上に常駐させて監視させていたのですが、
ある程度の時間(例えば1日)が経過すると、変更イベントを拾わなく
なってしまいます。

ヘルプを探してみたのですが、InitializeLifetimeServiceメソッドでどうにか
するのだろうという当りはつくものの、具体的にどのように監視期限を
無制限に設定するのか解りません。

ちなみに、本プログラムにはfrmAとfrmBの2つのフォームがあり、
frmAで監視するフォルダなどを指定させ、FileSystemWatcherコンポーネント
を仕込んだfrmBをモーダルで表示させています。

ちなみに、変更イベントを拾わなくなったのを確認後、frmB上の『戻る』ボタン
でfrmAに戻ってから、再度frmBを表示させるとイベントを拾うようになります。

最悪、タイマーでBeginInitか何かをかければいいんでしょうか?

ご教示頂けると助かります。m(_)m
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2005-07-14 11:33
FileSystemWatcherの問題ではなくて、ASP.NETの問題のような気がします。

同じ機能をコンソールアプリケーションで作っても、同じ現象が起きるでしょうか?
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2005-07-14 11:54
catsさん、早速のレスありがとうございます。

>同じ機能をコンソールアプリケーションで作っても、同じ現象が起きるでしょうか?
やってみます。

ちなみに、タイマーコントロールを使って一定間隔で
下記のように値をセットし直しましたところ
変更イベントを拾うようになりました。

Me.FileSystemWatcher1.EnableRaisingEvents = True
Me.FileSystemWatcher1.IncludeSubdirectories = True
Me.FileSystemWatcher1.SynchronizingObject = Me
Me.FileSystemWatcher1.Filter = フィルタ
Me.FileSystemWatcher1.Path = 監視パス
Me.FileSystemWatcher1.NotifyFilter = (IO.NotifyFilters.CreationTime Or IO.NotifyFilters.FileName Or IO.NotifyFilters.LastWrite)

しかしスマートではないですよね。^^;
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2005-07-14 17:29
お世話さまです。

自社環境にていくつかテストして判ったことをご報告致します。

まず、今回VBで作成した監視ツールを私は下記のように使用していました。

1.Aサーバー(リブートすることのない、立ち上げっ放しのサーバー)上で
  監視したい別サーバー(B、C、D…)上のフォルダをAサーバーの
  ネットワークドライブとして接続。

2.Aサーバー上で今回作成したExeを起動してB…以下のサーバーの特定の
  フォルダを監視

実は監視先のB…以下のサーバーが毎朝6時に再起動されておりまして、
このために監視対象から外れていたようです。^^;

で、前述のタイマーで一定時間間隔で値をリセットするようにしてからは
イベントを拾うようになりました。

ただ、ここで問題なのが、B…以下のサーバーが再起動中に
タイマーイベントが発生すると、ドライブが見つからないとの
エラーが発生します。
(これ書きながらこの対処方法がプログラムに未実装なことに気付きました。^^;)

ということで、監視期限は何も設定しなくてもプロセスが生きている
限り無制限なんだと思います。

お騒がせ致しました。
1

スキルアップ/キャリアアップ(JOB@IT)