filesystemwatcher als windows-Dienst?
Ich bin Sie eine app erstellen, die zu beobachten wird ein Verzeichnis für die Dateien erstellt. ziemlich einfach, die Zeit zu nutzen, ein filesystemwatcher. Meine Frage bezieht sich auf how es zu nutzen. Ist es üblich ein windows-Dienst, um sicherzustellen, dass die Anwendung immer läuft?
ich habe versucht, Weg von der Erstellung der windows-Dienste, wenn ich mich nicht um, aber ich wirklich nicht sehen, ein alternative, es zu tun auf diese Weise in diesem Fall. normalerweise würde ich meine konvertieren Dienst an einer Konsole app und planen Sie es mithilfe der windows-scheduler, aber nicht wirklich in dieser situation.
kann jemand empfehlen, einen besseren Weg der Umsetzung der filesystemwatcher als ein windows-Dienst?
vielen Dank für jeden Gedanken.
BEARBEITEN
in Reaktion auf die Kommentare unten, genauer gesagt, ich habe nur zu beobachten, ein Verzeichnis auf einem server, und wenn eine neue Datei erstellt wird, ich habe zu bewegen, eine Kopie der Datei in ein anderes Verzeichnis auf demselben server, vielleicht umbenennen in den Prozess.
Die Häufigkeit und Menge der Dateien Recht klein. vielleicht 5-10 am meisten in einem Tag.
- Vielleicht ist die Implementierung des service in einem weniger Speicher in Beschlag Sprache/Laufzeitumgebung und nur führen Sie Ihre C# - Programm, wenn es findet eine neue Datei.
- keine gute Idee ist. Nativ FSW-Funktion ist sehr viel schwieriger, ebenso wie die Komplikation beteiligt, die in einer dual-process-Lösung. Ich dachte, wir waren die letzten, die Stereotypen über verwalteten code?
- Wirklich, CodeInChaos? Ich bin für die Effizienz, aber ich bin mir nicht sicher, ob Ihr Kommentar ist besonders konstruktiv, und ich sicherlich nicht wollen, um den Kerl zu Graben, bis jemand den code später, wo der Sprachumschaltung für verschiedene Teile des Projekts fertig war. (That being said, ich denke, wir alle tun das oft auch...)
- Ihre Frage ist nicht klar. Sie schlagen mit FSW, um sicherzustellen, dass ein Programm läuft?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie beschreiben, was du tun möchtest, aber in der Regel, wenn man etwas, das im hintergrund ausgeführt und erfordert keine direkte Interaktion mit dem Benutzer, dann einen Dienst Häufig sinnvoll.
Können Sie mit Remoting zu verbinden, ein front-end für Ihren Dienst benötigt, wenn Sie möchten.
Ich mir noch nicht sicher bin, wie die Datei watcher funktioniert, aber dies ist, was ich denke: Die Datei system löst Ereignisse aus, ich meine wie muss NTFS sein, das zu tun. Ihre Datei-watcher-Haken in die Ereignisse. Die Datei watcher wahrscheinlich hält der thread läuft, bis ein Ereignis Eintritt, und das Ereignis irgendwie weckt der thread. Ein verschobener thread verwendet, ziemlich viel, sehr wenige cpu-Zyklen (eigentlich keine), während es ausgesetzt ist, so warten für eine Datei, die Veranstaltung kostet nichts. So eine Polling-Ansatz Abfälle mucho beaucoup (das ist Französisch, es bedeutet 'ein scheiß laden") von cpu-Zyklen, aber die Datei watcher nicht. Sie könnte wahrscheinlich Blick auf PerfMon um zu sehen, ob dies ist wahrscheinlich wahr.
Ja, verwenden Sie einen service für diese Art der operation, aber nicht verwenden Dateisystem watcher. Wenn Sie die Umfrage für Dateien in deinem Dienst, dont verwenden die Timer-Klasse.
Tun, stellen Sie sicher, dass die Datei fertig zu schreiben und ist nicht mehr gesperrt, bevor Sie versuchen, es zu verschieben.
Seine trivial-Umfrage für die änderungen einer Datei (syntax kann ausgeschaltet sein), und beseitigt viel der extra-Programmierung in Verbindung mit FileSystemWatcher-events.
ReadDirectoryChangesW
- viel schwieriger, dieses Recht zu bekommen, und die gleichen Probleme mit der Zuverlässigkeit.Mithilfe eines Windows-Dienstes zu wickeln
FileSystemWatcher
ist völlig in Ordnung für das, was Sie brauchen.FSW ist das richtige Werkzeug für den job (native-code für das Dateisystem zu beobachten, ist einen Bären zu Recht erhalten) und ein service ist der richtige Mechanismus bereitstellen, der es gegeben, Sie müssen 'always on' - Betrieb.
Die Anmeldeinformationen des Dienstes unabhängig von angemeldeten Benutzer zu, die für Sie nützlich sein kann.