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 回答