2012-06-14 46 views
1

我运行Windows服务在Windows 2003中我已经添加/每天都在变化的代码给它的最后一个月,和日常上个月我filewatcher一直在努力。但是,由于某种奇怪的原因,它今天停止工作。如果我恢复到旧代码,它仍然不会引发事件。我在我的Win7机器上测试过相同的代码,它工作正常。我假设有一个外部过程干扰,但我甚至不知道要寻找什么。FileWatcher在Windows服务突然停止工作

下面是相关代码:

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()方法的末尾。

+0

你在哪里设置你FileSystemWatcher的的路径属性? –

+0

在具有/ onstart/onstop方法的类的构造函数中:public Ex() { Settings = new Settings(); InitializeComponent(); processfileWatcher.Path = Settings.ProcessFolder; } – user1287523

+0

我不知道为什么它不为你工作,但是这里有几个通用代码的建议:1)你不需要投你的'FileSystemWatcher'到'FileSystemWatcher' 2)它可能是一个在Init代码中设置Path字段是个好主意。 –

回答

0

如果事情是造成很多你可能用完缓冲的快速盘面变化,你必须赶上你正在寻找或您的服务的凭证可能不会为你工作正在监视什么事的机会了。

尝试给予明确权限,然后通过增加对fileystemwatcher的错误事件的处理程序查找缓冲问题。

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

+0

谢谢,我会尝试。磁盘清理程序正在运行,并试图压缩旧文件,因为我只剩下大约35MB的空间,但我确实关闭了该过程,因为我怀疑它可能会导致某些情况。我明天早上到办公室并且回报时会首先尝试你的建议。谢谢! – user1287523

+0

出于好奇,你最终发现了什么? – Bill

+0

我发现它一直在工作,但它没有输出调试语句,所以我以为它没有被触发。我开了一个新问题。 – user1287523

0

尝试用this.processfileWatcher.Created事件测试一下,看看在创建新文件时,如果它仍然引起。 也尝试手动设置NotifyFilter属性(doc)并查看是否有效。

+0

我已经改变它创建以及选择不同的目录,但我没有触发任何事件 – user1287523

+0

你正在看同一目录或改变它看网络驱动器或什么?还有一件事,你可以使用调试器来调试你的Windows服务程序,使用debug attach to progam。看到链接[http://msdn.microsoft.com/en-us/library/7a50syb3%28v=vs.100%29.aspx] – ArmenB

+0

我试图附加一个调试器,但它不会让我,因为我' m使用混合非托管/托管代码。我试图将调试设置为托管,但在属性页面窗口的配置属性下看不到任何调试选项。 我发现filewatcher现在正在被正确触发,但不是通过正常代码运行,而是启动一个早期在代码中调用的.exe文件。我不知道为什么会发生这种情况。我甚至在filewatcher的开头有调试语句,但没有任何内容显示在debugview上。 Exe没有filewatcher方法。 – user1287523