2015-06-14 34 views
3

我有一个windows服务需要监视文件的目录,然后将其移动到另一个目录。我正在使用FileSystemWatcher来实现这一点。在Windows服务中使用FileSystemWatcher

这是我的主要服务类。

public partial class SqlProcessService : ServiceBase 
{ 
    public SqlProcessService() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     FileProcesser fp = new FileProcesser(ConfigurationManager.AppSettings["FromPath"]); 
     fp.Watch(); 
    } 

    protected override void OnStop() 
    { 

    } 
} 

这是我FileProcessor类

public class FileProcesser 
{ 
    FileSystemWatcher watcher; 
    string directoryToWatch; 
    public FileProcesser(string path) 
    { 
     this.watcher = new FileSystemWatcher(); 
     this.directoryToWatch = path; 
    } 
    public void Watch() 
    { 
     watcher.Path = directoryToWatch; 
     watcher.NotifyFilter = NotifyFilters.LastAccess | 
        NotifyFilters.LastWrite | 
        NotifyFilters.FileName | 
        NotifyFilters.DirectoryName; 
     watcher.Filter = "*.*"; 
     watcher.Changed += new FileSystemEventHandler(OnChanged); 
     watcher.Created += new FileSystemEventHandler(OnChanged); 
     watcher.EnableRaisingEvents = true; 
    } 

    private void OnChanged(object sender, FileSystemEventArgs e) 
    { 
     File.Copy(e.FullPath, ConfigurationManager.AppSettings["ToPath"]+"\\"+Path.GetFileName(e.FullPath),true); 
     File.Delete(e.FullPath); 
    } 
} 

我安装并启动服务后,它的工作原理罚款1个文件,然后自动停止。什么使服务自动停止?当我检查事件日志时,我没有看到错误或警告!

+0

您可以将Visual Studio调试器附加到进程并对其进行调试。也可以使用try catch并将异常写入文本文件。 – dotctor

+0

它崩溃了吗?做一个尝试赶上并记录 –

回答

7

你的局部变量fp一旦超出范围就会被处置掉。解决方法是将其声明为实例变量,而不是

+0

不知道为什么它downvoted。像魅力一样工作! – Sai