1

私は Windows 2003 で Windows サービスを実行しています。先月は毎日コードを追加/変更しており、先月は毎日ファイルウォッチャーが機能していました。しかし、奇妙な理由で今日は機能しなくなりました。古いコードに戻しても、まだイベントは発生しません。Win7 マシンで同じコードをテストしましたが、問題なく動作しています。干渉している外部プロセスがあると想定していますが、何を探すべきかさえわかりません。

関連するコードは次のとおりです。

private void InitializeComponent()
    {
        this.processfileWatcher = new System.IO.FileSystemWatcher();
        ((System.ComponentModel.ISupportInitialize) (this.processfileWatcher)).BeginInit();
        this.processfileWatcher.EnableRaisingEvents = true;
        this.processfileWatcher.Filter = "done.txt";
        this.processfileWatcher.Changed += new System.IO.FileSystemEventHandler(this.processfileWatcher_Changed);
        this.ServiceName = "Service1";
        ((System.ComponentModel.ISupportInitialize)(this.processfileWatcher)).EndInit();

    }

private void processfileWatcher_Changed(object sender, System.IO.FileSystemEventArgs e)
    {
        try
        {
            processfileWatcher.EnableRaisingEvents = false;
            //Do stuff here
            Debug.WriteLine(" End of processfileWatcher for: " + e.FullPath);
        }

        finally
        {
            processfileWatcher.EnableRaisingEvents = true;
        }

    }

デバッグ ステートメントを通じて、onStart() メソッドの最後に到達していることを確認できます。

4

2 に答える 2

0

this.processfileWatcher.Created イベントでテストしてみて、新しいファイルが作成されたときにまだ発生するかどうかを確認してください。また、NotifyFilter プロパティを手動で設定してみて ( doc )、それが機能するかどうかを確認してください。

于 2012-06-14T19:59:36.447 に答える
0

何かが急激なディスク変更を引き起こしている場合、探しているものをキャッチする前にバッファが不足している可能性があります。または、サービスの資格情報が監視対象に対して機能していない可能性があります。

明示的なアクセス許可を付与してから、fileystemwatcher のエラー イベントのハンドラーを追加して、バッファーの問題を探します。

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.error%28v=vs.100%29.aspx

于 2012-06-14T22:51:45.740 に答える