![]() |
Benutzerinteraktion mit Windowsdienst
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
Delphi-Quellcode:
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:
ShowMessage()
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
Delphi-Quellcode:
? Ich habe logischerweise keine Kenntnis über die Passwörter der Domänenbenutzer, natürlich aber Adminrechte zur Verfügung.
createProcessAsUser()
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 8-) 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. |
AW: Benutzerinteraktion mit Windowsdienst
Du brauchst keine Passwörter, es reicht wenn Du das Token der fraglichen Session dupliziert und für CreateProcessAsUser verwendest. So verwende ich das von einem Dienst aus problemlos, um Feedback anzuzeigen / abzufragen.
Stichworte: TcbPrivilege, DebugPrivilege, ImpersonatePrivilege, WTSGetActiveConsoleSessionId, WTSQueryUserToken (Stolperfalle: funktioniert nur von Systemdiensten aus), DuplicateTokenEx, CreateProcessAsUser. War meine ich hier schonmal Thema :) |
AW: Benutzerinteraktion mit Windowsdienst
Das klingt nach dem, was ich suche :-D
Vielen Dank schonmal für deine super schnelle Antwort, CCRDude. Ich werde mich gleich mal ransetzen und das Ganze ausprobieren. |
AW: Benutzerinteraktion mit Windowsdienst
Der Grund warum das so aufwändig ist, was du vorhast ist der, dass Dienste quasi einen eigenen Desktop haben alles was die starten oder Anzeigen popt dort auf.
Ich nehme an du willst nicht, dass eine Oberflächen-Anwendung im context des Users über Autostart gestartet wird die evtl. als Tray-Icon läuft? Oder Benachrichtigungen in der Windows-Sidebar anzeigen? |
AW: Benutzerinteraktion mit Windowsdienst
Jupp, im Prinzip hast ja nur ein paar Möglichkeiten.
|
AW: Benutzerinteraktion mit Windowsdienst
Werden wirklich Formulare bzw. echte Anwendungen benötigt? Würden nicht Webseiten reichen? Das ist heute der übliche Weg zur Interaktion mit Diensten.
Zitat:
|
AW: Benutzerinteraktion mit Windowsdienst
Ohhh. :shock:
Hatte vorhin doch noch die Checkbox in den Einstellungen gesehn, bzw. dachte das sei die Option für jene Funktionalität. Ja. ![]() Aber genau diese Checkbox seh ich bei mir noch. ![]() |
AW: Benutzerinteraktion mit Windowsdienst
Hi,
früher nutzte man dazu die Control Panels. Gibt es auch unter Windows 10 (siehe SysWOW64/*.cpl). |
AW: Benutzerinteraktion mit Windowsdienst
Zitat:
Die sind aber eher zum Setzen von Einstellungen gedacht und weniger zur Steuerung eines Dienstes, auch wenn einige davon auch etwas zu Diensten schicken mögen. Dafür wäre eher ein *.msc Snap-In für die MMC sinnvoll wie z.B. die Datenträgerverwaltung. Aber auch die soll ja (leider abgespeckt) in den neuen Einstellungen landen... |
AW: Benutzerinteraktion mit Windowsdienst
Zitat:
Zitat:
Back to console würde ich mal sagen. Die neuen Einstellungen sind sowas von nervig. Warum zur Hölle muss alles auf Touch ausgelegt werden? Ich verstehe ja, warum man nur eine GUI pflegen will. Aber das auf Kosten der Bedienbarkeit bei normalen Desktop PCs und der Möglichkeiten die man damit hat machen? Ein anderes Beispiel sind die Remote Optionen. Wenn man nicht als Administrator angemeldet ist, kommt man an die Einstellungen gar nicht erst ran um Remotedesktop zu aktivieren. Bei den "alten Einstellungen" über die Systemsteuerung wurde man dann eben nach Benutzername und Passwort gefragt. Und? War das so schlimm? Manchmal denke ich echt, Microsoft will die Nutzer zu Linux jagen ... [/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz