Wie führe ich den Code im c # -Service einmal pro Tag zur selben Stunde aus?

8

Also hier ist mein Problem, ich muss einen c # Dienst auf einem Server ausführen, der eine Datei auf ftp einmal pro Tag um 3 Uhr morgens bekommt. Ich denke, dass ich es mit einem thread.sleep () machen kann oder vergleiche DateTime.Now mit 3am ....

Haben Sie eine bessere Lösung?

Vielen Dank für Ihre Hilfe!

    
Bigballs 03.09.2009, 13:06
quelle

8 Antworten

36

Bessere Lösung, lassen Sie es von Windows mit geplanten Aufgaben erledigen.

Wenn es nur einmal am Tag ausgeführt werden muss, würde ich mich dafür entscheiden. Sogar Google macht es;)

BEARBEITEN:

Um den Kommentar zu beantworten, ist es wie Fredrik gesagt hat. Es ist eine erweiterte Option, die Sie öffnen können, wenn die Aufgabe eingerichtet wird. Sie enthält eine Checkbox mit dem Namen: " Run only if logged on ", die zunächst falsch ist.

    
Kyle Rozendo 03.09.2009, 13:10
quelle
4

Schreiben Sie eine Konsolen-App oder Ähnliches, und verwenden Sie den Windows-Planer (oder wie auch immer er heutzutage heißt ...), um ihn täglich auszuführen.

    
Tomas Lycken 03.09.2009 13:08
quelle
3

Für eine flexible Lösung können Sie dies verwenden. Es ist kein Windows-Dienst, aber Sie könnten es leicht in einen integrieren. Oder Sie überlegen sich Quartz.NET , das angeblich eine industrielle Stärke ist (die Java-Version ist es sicherlich).

    
Vinay Sajip 03.09.2009 13:09
quelle
3

Ich habe geplante Aufgaben erfolgreich für Sicherungen verwendet, aber ich habe ein paar Worte zur Vorsicht ...

Geplante Aufgaben werden nicht ausgeführt, wenn Sie sich abmelden. Ich bin mir nicht sicher, ob dies überschrieben werden kann, aber ich wurde von nicht ausgeführten Aufgaben überrascht, weil Windows automatisch aktualisiert, neu gestartet und auf mich wartet, bis ich mich anmelde.

Ich habe automatische Updates deaktiviert - Windows sollte zuerst fragen.

Eine weitere Überlegung ist, dass 3:00 Uhr eine Zeit ist, in der viele Benutzer normalerweise ausgeloggt würden.

    
pavium 03.09.2009 13:32
quelle
2

Andere Antworten sind gut. Ich dachte nur, ich würde darauf hinweisen.

  

vergleiche DateTime.Now mit 3am

ist eine schlechte Lösung, selbst wenn Sie zwischen den einzelnen Prüfungen einige Zeit schlafen, da Systemressourcen unnötig verschwendet werden (nicht nur beim wiederholten Überprüfen der Zeit, sondern auch bei der Speichernutzung des Programms).

    
Artelius 03.09.2009 13:16
quelle
2

Wenn Sie jede Nacht eine Datei erwarten, anstatt sich darüber Gedanken zu machen, wann sie ankommt, lassen Sie einfach ein Ereignis auslösen, wenn dies der Fall ist.

Schau dir an:

System.IO.FileSystemWatcher

Dateisystemüberwachung auf MSDN

>     
omantn 03.09.2009 13:35
quelle
1

Warum sollte dies nicht so eingestellt werden, dass es als geplante Aufgabe ausgeführt wird? Lassen Sie es ausführen und dann beenden. Richten Sie Windows so ein, dass der Prozess täglich um 3:00 Uhr als geplante Aufgabe gestartet wird.

    
Michael Meadows 03.09.2009 13:08
quelle
1

System.Threading.Timer könnte für Sie funktionieren.

Dokumentiert hier

    
KB22 03.09.2009 13:08
quelle