Windows服务中的FileWatcher突然停止工作

时间:2012-06-14 19:33:17

标签: c# service filesystemwatcher

我在Windows 2003中运行Windows服务。上个月我每天都在添加/更改代码,上个月我的filewatcher一直在工作。然而,由于一些奇怪的原因,它今天停止了工作。如果我恢复旧代码,它仍然不会引发事件。我在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()方法的末尾。

2 个答案:

答案 0 :(得分:0)

尝试使用this.processfileWatcher.Created事件对其进行测试,并查看创建新文件时是否仍会引发此事件。 还可以尝试手动设置NotifyFilter属性(doc)并查看是否有效。

答案 1 :(得分:0)

如果某些内容导致大量快速磁盘更改,您可能会在有机会捕获正在查找的内容之前耗尽缓冲区,或者您的服务凭据可能无法用于您正在监视的内容。

尝试授予显式权限,然后通过为fileystemwatcher的错误事件添加处理程序来查找缓冲区问题。

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