Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Ordner-Überwachung per dauerhaft laufenden Dienst/Prozess od. Task-Scheduler
Jesfreric
myCSharp.de - Member



Dabei seit:
Beiträge: 40

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Du kannst dir auch mal die FileSystemWatcher Class anschauen, dann brauchst du nicht zu pollen.
private Nachricht | Beiträge des Benutzers
Neidhard
myCSharp.de - Member



Dabei seit:
Beiträge: 140

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Jesfreric
myCSharp.de - Member



Dabei seit:
Beiträge: 40

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Jesfreric
myCSharp.de - Member



Dabei seit:
Beiträge: 40

Themenstarter:

beantworten | zitieren | melden

Blödsinn...

Wenn ich das Skript über den TaskScheduler ausführe, brauche ich den FileSystemWatcher ja gar nich..
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7563
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7563
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,
Zitat
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!"
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7563
Herkunft: Waidring

beantworten | zitieren | melden

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ü
Attachments
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!"
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
trib
myCSharp.de - Member



Dabei seit:
Beiträge: 692

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Zitat
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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
trib
myCSharp.de - Member



Dabei seit:
Beiträge: 692

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers