/ / Verwenden eines FileSystemWatcher mit Windows-Dienst - c #, Windows-Dienste, Dateisystemwächter

Verwenden eines FileSystemWatcher mit Windows-Dienst - c #, Windows-Dienste, Dateisystemwächter

Ich habe einen Windows-Dienst, der ein Verzeichnis nach Dateien überwachen und dann in ein anderes Verzeichnis verschieben muss. Ich verwende einen FileSystemWatcher, um dies zu implementieren.

Dies ist meine Hauptdienstklasse.

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()
{

}
}

Dies ist meine FileProcessor-Klasse

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);
}
}

Nachdem ich den Dienst installiert und gestartet habe, funktioniert er für 1 Datei einwandfrei und wird dann automatisch beendet. Was stoppt den Dienst automatisch? Wenn ich das Ereignisprotokoll überprüfe, sehe ich keinen Fehler oder eine Warnung!

Antworten:

7 für die Antwort № 1

Ihre lokale Variable fp wird entsorgt, sobald sie den Gültigkeitsbereich verlässt. Die Lösung besteht darin, sie stattdessen als Instanzvariable zu deklarieren