Ich habe eine C++-Win32-Anwendung, die als Windows-GUI-Projekt geschrieben wurde, und jetzt versuche ich, herauszufinden, um es in einen Dienst / GUI-Hybrid zu machen. Mir ist klar, dass ein Windows-Dienst keine Benutzeroberfläche haben kann/soll. Aber erlauben Sie mir, zu erklären, was ich bisher habe und was ich anstrebe.
WAS ICH JETZT HABE ist eine Windows-Anwendung. Wenn sie ausgeführt wird, legt sie ein Symbol in der Taskleiste ab, auf das Sie doppelklicken können, um die grafische Benutzeroberfläche zu öffnen. Der Zweck dieser Anwendung ist die Verarbeitung von Dateien in einem bestimmten Verzeichnis nach einem nächtlichen Zeitplan. Die grafische Benutzeroberfläche besteht aus den folgenden Elementen:
- Eine Schaltfläche zum manuellen Starten eines ungeplanten Scans/Vorgangs.
- Eine Schaltfläche zum Öffnen eines Dialogs zum Ändern von Einstellungen.
- Eine Listbox zur Anzeige der vom Verarbeitungs-Thread gesendeten Statusmeldungen.
- Ein benutzerdefiniertes Fenster zur Anzeige von Bilddaten (die Dateiverarbeitung umfasst das Erstellen und Speichern von Bildern).
- Eine Statusleiste - wenn ein Prozess nicht läuft, zeigt sie einen Countdown bis zum nächsten geplanten Scan an. Während eines Scans liefert sie auch einige Statusinformationen, einschließlich einer Fortschrittsanzeige.
WAS ICH ANSTREBE ist ein Dienst, der beim Hochfahren ausgeführt wird und keine Anmeldung eines Benutzers erfordert. Dieser Dienst würde aus der geplanten Dateiverarbeitung bestehen. Wenn sich ein Benutzer anmeldet, möchte ich jedoch, dass das Tray-Symbol geladen wird und er eine grafische Benutzeroberfläche wie oben beschrieben öffnen kann, um den aktuellen Status des Dienstes zu überwachen, Einstellungen zu ändern, einen Scan manuell zu starten und den Fortschritt eines Scans zu überwachen.
Ich bin sicher, dass ich schon solche Anwendungen gesehen habe, die auch dann als Dienst funktionieren, wenn ich nicht angemeldet bin, mir aber trotzdem eine Benutzeroberfläche bieten, mit der ich arbeiten kann, wenn ich angemeldet bin.
Ich denke, dass ich statt einer einzigen Multi-Thread-Anwendung, die vom Verarbeitungsthread Nachrichten an den GUI-Thread sendet, zwei Anwendungen benötige - einen Dienst, der die Verarbeitung durchführt, und eine GUI-Anwendung, die visuelles Feedback vom Dienst liefert und auch Nachrichten an den Dienst sendet (z. B. um einen Scan manuell zu starten). Aber ich kenne mich mit Windows-Diensten nicht aus und habe keine Ahnung, wie das geht.
Es ist auch möglich, dass ich völlig daneben liege und ein Service überhaupt nicht das ist, wonach ich suche.
Für jede Hilfe / Idee / Anregung wären wir sehr dankbar! Ich danke Ihnen.