Ist eine Anwendung mit „System Tray“ Symbol OK für einen kontinuierlich laufenden Scheduler oder soll ich einen Windows-Dienst erstellen?

StackOverflow https://stackoverflow.com/questions/1425599

  •  07-07-2019
  •  | 
  •  

Frage

Voraussetzung - Ich habe eine regelmäßige Aufgabe, die ich für meine Anwendung in einer Windows-Umgebung ausgeführt werden soll. Es wird eine einfache Schnittstelle, die einige grundlegende Konfiguration erlauben (zB URLs und wie oft es zu laufen). Ich will es alle X Stunden (konfigurierbar) ausgeführt werden, wenn die Maschine läuft.

Frage - Muss ich erstellen Sie einfach eine Anwendung mit einer System-Tray-Präsenz für das? Oder sollte ich einen Dienst erschaffen, die eine separate Benutzeroberfläche hat, die in es hakt.

übrigens - ich bin ein Anfänger mit C # Visual Studio Express Entwicklung im Auge behalten. Auch wenn Sie einen schnellen Überblick über die Gestaltung geben könnte, was empfehlen Sie, dass (zB für jemand neu in diesem groß sein würde, wenn Sie einen Dienst vorschlagen, bedeutet das Sie wirklich eine Anwendung für den Service benötigen, und andere Anwendung, die hat eine Benutzeroberfläche, die die Konfiguration für den Dienst tut?)

War es hilfreich?

Lösung

Ich entwickelte eine solche Anwendung im letzten Jahr. Eine einfache Windows Forms-Anwendung, die nur einen Tray-Icon hat. Der Benutzer kann die Anwendung über ein Kontextmenü (angezeigt, wenn der Benutzer mit dem rechten klickt auf den Tray-Icon) konfigurieren. Ich benutzte einen Timer, der die verstrichene Ereignis ausgelöst ...

Wenn diese Anwendung wird die einzigen sein, dabei einige Aufgaben auf zeitnah dann gehen Sie einfach mit einer Windows Forms-Anwendung mit einem Tray-Icon. Aber wenn es mehrere mögliche Anwendung sein, die Eingabe senden und eine gewisse Aktivität auslösen, dann sollten Sie die gemeinsame Funktionalität in einem Windows-Dienst in Erwägung ziehen. Sie sollten auch einen Windows-Dienst prüfen zu verwenden, wenn die Anwendung auf einem Rechner läuft mit Terminaldienste (mehrere Benutzer -> mehrere Instanzen Ihrer App).

würde ich nicht eine geplante Aufgabe verwenden! Es ist weniger benutzerfreundlich ...

-Pavel Nikolov

Andere Tipps

Wenn Sie etwas Einfaches suchen, sollte Windows-Scheduler mit den Jobs zu planen, ein Shim der Aufträge auszuführen, nachdem Scheduler es beginnt und ein Konfigurationsdienstprogramm, das für das Setup ermöglicht. Aber ich müsste empfehlen, dass Sie beurteilen, wie flexibel und wie zuverlässig die Arbeitsplätze brauchen. Wenn es in Ordnung ist, wenn die Arbeitsplätze konsequent nicht laufen, dann eine Benutzeranwendung im Infobereich wäre ausreichend. Aber wenn der Job auf eine Funktion von Unternehmen oder einem anderen Betrieb entscheidend ist, würde ich mit Scheduler oder den Dienst gehen. Wenn Sie einen Dienst tun, würden Sie einen Configdienstprogramm und einen Dienst haben, die über einige Mittel kommunizieren würde. Sie konnten die Configdienstprogramm Schreiben auf eine Datei haben (vielleicht eine XML-Konfigurationsdatei) Config zu aktualisieren, dann nur den Dienst neu starten um die Konfiguration zu aktualisieren.

Wenn es ausgeführt werden muss, wenn kein Benutzer angemeldet ist, müssen Sie einen Dienst. Wenn es eine Benutzeranwendung ist, die nicht ausgeführt werden muss, wenn alle Benutzer abgemeldet sind, dann wäre eine System-Tray-Anwendung in Ordnung sein.

Der Aufbau einer Service mit UI Haken klingt kompliziert für das, was Sie erreichen wollen. Eine System-Tray-Anwendung klingt richtig für diese, ich würde auf jeden Fall diesen Weg gehen.

Es hängt von der Größe der Anwendung. Wenn es recht klein ist es in der Schale lassen, wenn Sie bereits diese Lösung schreiben did't

Wenn Sie es brauchen jemals X Stunden laufen die Maschine läuft, auch wenn niemand auf angemeldet ist, dann ist entweder eine geplante Aufgabe oder ein Dienst könnte richtig sein.

Was wird der Dienst in der „Totzeit“ zwischen den Downloads zu tun? Wenn die Antwort nichts ist, dann ist geplante Aufgabe fast sicher richtig. Sie würden wollen eine Konsolenanwendung erstellen, wie die geplante Aufgabe ausgeführt werden soll.

Es würde helfen, wenn wir mehr über wissen, was, wenn überhaupt, User Interface verwendet wird.

würde ich die Hauptverarbeitung als Windows-Dienst, sonst erstellen, wenn Sie Computer neu gestartet wird und Sie sich anmelden nicht, haben Sie nicht der Prozess gestartet, in das Fach sitzen (und damit Ihr Prozess ausgeführt wird nicht). erstellen Alternativly eine Dummy-Konsolenanwendung oder Silar und führen Sie, dass durch die Fenster Scheduler. Auch mit einem Windows-Dienst, wenn er abstürzt können Sie konfigurieren, automatisch neu zu starten, die Sie kann nicht (leicht) zu tun mit einem Fenster applicaition in der Schale sitzt.

habe ich dann eine zweite Anwendung mit einer grafischen Benutzeroberfläche, die die Konfiguration auf eine gemeinsame Konfigurationsdatei schreibt, die von beiden Anwendungen verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top