Laden...

Ordner-Überwachung per dauerhaft laufenden Dienst/Prozess od. Task-Scheduler

Erstellt von Jesfreric vor 7 Jahren Letzter Beitrag vor 7 Jahren 6.021 Views
J
Jesfreric Themenstarter:in
40 Beiträge seit 2016
vor 7 Jahren
Ordner-Überwachung per dauerhaft laufenden Dienst/Prozess od. Task-Scheduler

Liebe Community

Wahrscheinlich (wieder) eine Anfängerfrage...
Ich habe ein kleines Skript geschrieben, was einen speziellen Ordner auf dem Computer überwacht (Mittels Timer alle 5 Sekunden). Falls diverse Files vorhanden sind, werden diese konvertiert und später gelöscht.
Meine Frage ist nun, wie bekomme ich das Skript "dauerhaft" zum laufen.
Ich habe keine Windows-Forms, weswegen ich eine Konsolenanwendung mittels Visual Studio erstellt habe. Sobald ich das Skript aber ausführe ist es auch schon wieder beendet...
Was mache ich falsch?
Ich würde die .exe später in den Autorun Ordner des PC's verschieben, sodass sie bei jedem Neustart gleich ausgeführt wird...

Viele Grüße
Jesfreric

1.029 Beiträge seit 2010
vor 7 Jahren

Hi,

für mich hört sich das so an, als ob du hier besser keine ConsoleApplication - sondern einen WindowsService geschrieben hättest.

Der Grund warum deine ConsoleApplication sich "vorzeitig" beendet ist relativ einfach - nur weil ein Timer noch irgendwo läuft ist das für deine ConsoleApplication kein Grund sich vorzeitig zu beenden - hier würde wahrscheinlich ein Console.ReadLine(); oder ähnliches als Workaround helfen. Die feine Art ist das dennoch nicht.

LG

W
955 Beiträge seit 2010
vor 7 Jahren

Du kannst dir auch mal die FileSystemWatcher Class anschauen, dann brauchst du nicht zu pollen.

N
135 Beiträge seit 2006
vor 7 Jahren

Genau so sieht es aus.
Wenn der MainThread am Programmende angekommen ist wird die Anwendung geschlossen.

Wenn Du Deine Anwendung über Autostart startest, kannst Du es auch gleich über den TaskSheduler eintackten und auch von ihm alle 5Minuten starten lassen.

J
Jesfreric Themenstarter:in
40 Beiträge seit 2016
vor 7 Jahren

Hi

Danke für euren ganzen Antworten. D.h. ich werde mein Skript nochmal mit der "FileSystemWatcher" Klasse überarbeiten und es dann einfach über den Task Scheduler alle 5 Sekunden ausführen lassen.

Danke 😃
Jesfreric

J
Jesfreric Themenstarter:in
40 Beiträge seit 2016
vor 7 Jahren

Blödsinn...

Wenn ich das Skript über den TaskScheduler ausführe, brauche ich den FileSystemWatcher ja gar nich..

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Jesfreric,

anhand der Rahmenbedingungen (Dateien im Ordner alle 5s prüfen) wäre ziemlich sicher ein Dienst mit FileSystemwatcher die bessere Wahl, v.a. wenn im Ordner viele Dateien sind, da so direkt auf die Änderung reagiert werden kann.

Sind es nur eine handvoll Dateien, so kannst du den Weg mit dem Pollen auch gehen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

falls Du mit einem Timer oder dem TaskScheduler arbeitest, wäre es noch wichtig, wie lange Deine Bearbeitung/Konvertierung dauert.
Behalte auf jeden Fall im Hinterkopf, was passiert, wenn die Bearbeitung länger dauert als das Zeitintervall.
Bei einem Timer kannst Du den immer nur einmal ticken lassen und erst wieder aktivieren, wenn die Bearbeitung durch ist - ähnlich kannst Du es auch bei einem Dienst selbst steuern.
Der TaskScheduler bietet Dir diese Möglichkeit nicht.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo,

Der TaskScheduler bietet Dir diese Möglichkeit nicht.

Nur der Vollständigkeithalber: Im TaskScheduler können Optionen gesetzt werden wie der Fall behandelt wird wenn die Aufgabe länger als das Intervall dauert.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

danke für den Hinweis, Gü. Das kannte ich so nicht. Allerdings scheinen die Möglichkeiten da eher begrenzt zu sein.
Sowas wie "warte bis zum Abschluss der laufenden Aufgabe und versuche es dann wieder" habe ich jedenfalls auf die Schnelle nicht gefunden - eher nur solche Einstellungen, die festlegen, wann eine laufende Aufgabe abgebrochen werden soll/darf.
Hab jetzt allerdings gerade nur Win7 zur Hand, vielleicht hat sich da ja mittlerweile was geändert. Oder ich bin einfach blind 😉

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Markus,

begrenzter ist es schon, als selbst gesteuert, aber siehe angehängtes Bild.

Sonst kann auch von der Aufgabe ein Export gemacht werden. Dort liegt die Aufgabe dann als XML vor und da gibt es noch ein paar Möglichkeiten (v.a. in Bezug auf Zeiten bzw. Intervalle speziell Einheiten) die über die UI nicht gewählt werden können.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo Gü,

OK, ich bin also tatsächlich sowas von blind 8) (<-- das ist keine Sonnenbrille

Danke nochmal für die Klarstellung! 👍

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
708 Beiträge seit 2008
vor 7 Jahren

Wenn wir schon das Thema Vollständigkeit behandeln 😃

Der FileSystemWatcher muss neu initialisiert werden, wenn er einmal durchlaufen ist.
So kann einem gerne mal eine Datei durch die Lappen gehen, die während der Verarbeitung erstellt wurde.
Daher empfiehlt es sich am Ende des Events noch einmal den entsprechenden Ordner nach neuen Dateien zu durchsuchen.

Ansonsten an gfoidl´s Tipp halten und bei einer überschaubaren Menge von Dateien pollen.

16.835 Beiträge seit 2008
vor 7 Jahren

Der FileSystemWatcher muss neu initialisiert werden, wenn er einmal durchlaufen ist.

Die Aussage hast Du woher genau?

Es gibt Beschränkungen (vor allem übers Netzwerk), aber davon hab ich noch nie gehört.

Beim Pollen direkt auf die Win32 API gehen (FindFirstFile /FindNextFile).
Ist um Welten(!!!) schneller.

T
708 Beiträge seit 2008
vor 7 Jahren

Sorry, da habe ich mich vertan!
In meinen Codes setze ich selbst die EnableRaisingEvents auf false und am Ende wieder auf aktiv.

Bzw. habe ich das glaube ich mit SQL Dependency durcheinander gebracht. Da muss man nach jedem Event-Aufruf die Anfrage neu absetzen.