Hi Leute,
Bei meinem aktuellen Projekt habe ich einen Dienst für Windows programmiert, welcher mittels eines TIdTCPServers auf Anfragen von Clients reagiert, soweit so gut.
Nun wollte ich, dass bei bestimmten Aktionen Formulare für den aktuell angemeldeten Benutzer sichtbar werden. Ich habe bereits sehr viel über die Sicherheitstechniken von Windows bezüglich der Benutzerinteraktion mit Diensten gelesen (auch bezüglich des Ausführungskontextes) und bereits Einiges davon ausprobiert.
Ich wollte testweise bspw. eine einfache Nachricht mittels
ShowMessage()
ausgeben. Wenn ich meinen Dienst auf „Interactive“ setze (oder einfach die Interaktionen mit dem Desktop in den Eigenschaften des Dienstes in der Diensteverwaltung aktiviere), wird jedoch keine Nachricht angezeigt. Ich weiß, dass dieser Weg auch nicht gerade der Beste ist und habe daher folgende Frage an euch:
Wie kann ich mein Szenario am besten umsetzen?
Ich hatte die Idee, dass der Dienst eine separate Anwendung startet und mittels Parametern die auszuführenden Aktionen steuert. Wenn der Dienst jedoch eine separate Anwendung startet, wird diese logischerweise im Kontext des Benutzers, in welchem der Dienst gestartet wurde, ausgeführt. Da der Dienst auch an Domänencomputern laufen soll, kann ich mich leider nicht auf einen Benutzer festlegen.
Gibt es eine Möglichkeit die separate Anwendung, welche quasi die Visualisierung enthält, über den Dienst im Kontext des aktuell angemeldeten (Desktop-) Benutzers zu starten (so ähnlich wie createProcessAsUser()
? Ich habe logischerweise keine Kenntnis über die Passwörter der Domänenbenutzer, natürlich aber Adminrechte zur Verfügung.
Falls meine Idee komplett am Thema vorbei ist, bin ich natürlich immer für andere Lösungsvorschläge zu haben.
Vielen Dank! ...und alle schön gesund bleiben
PS: Ich habe natürlich bereits diverse Foren durchsucht (auch
DP ) und festgestellt, dass dieses Thema in der Vergangenheit ebenfalls mehrfach zu Fragen geführt hat, jedoch sind die meisten Posts sehr alt (2005-2015). Leider habe ich auch dort keine Lösungen gefunden.