Einzelnen Beitrag anzeigen

Benutzerbild von Tim-94
Tim-94

Registriert seit: 3. Jul 2008
Ort: Hamburg
132 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Benutzerinteraktion mit Windowsdienst

  Alt 8. Feb 2021, 08:42
Hi Leute,

Freut mich, dass alle schon so fleißig geschrieben haben. Hier gibts eine kleine Sammelantwort:

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?
Genau das wollte ich versuchen zu umgehen. Ich wollte eigentlich ausschließlich einen Dienst haben, welcher meine Aufgaben erfüllen kann. Von diesem Konzept musste ich allerdings Abstand nehmen (siehe unten).

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
Ich habe das halbe Wochenende dran gesessen und es ausprobiert, jedoch leider ohne Erfolg...vielleicht war ich einfach zu blöd


Jupp, im Prinzip hast ja nur ein paar Möglichkeiten.
  • ein TrayProgramm, was zusätzlich beim Einloggen im Benutzerkontext gestartet wird und die ganze Zeit mitläuft (AutoRun oder geplante Aufgabe beim Login und ohne Tray, siehe Dienst im Nutzerkontext)
Danke himitsu für deine ganzen Vorschläge. Da ich mich nach den ganzen Fehlversuchen am Wochenende so geärgert () habe, habe ich mich für diese Variante entschieden. Der Dienst kommuniziert nun über TCP/IP mit der Anwendung, welche bei jedem Login eines Benutzers ausgeführt wird (Autostart - HKEY_LOCAL_MACHINE - RUN). Die gesamte Kommunikation funktioniert auch ganz hervorragend.

Werden wirklich Formulare bzw. echte Anwendungen benötigt? Würden nicht Webseiten reichen? Das ist heute der übliche Weg zur Interaktion mit Diensten.

als Bugfix für "uralte" Software kann man einen Dienst zwar auch als "interaktiv" einrichten (Dienste > Eigenschaften > Anmeldung > Datenaustausch mit Desktop zulassen), aber sowas macht man nicht
Das funktioniert mittlerweile gar nicht mehr, auch nicht mit Tricks. Die Funktionalität wurde entfernt.
Der Weg mit den Webseiten wäre für mich nicht zielführend gewesen, da die Anforderung ein autonom agierendes System, welches ohne Zutun der Benutzer Hinweismeldungen etc. anzeigen kann, gefordert war. Trotzdem danke für deinen Vorschlag. PS: Das die CheckBox mit der Desktopinteraktion irgendwie keine Auswirkungen mehr hat, ist mir auch aufgefallen.


Vielen Dank nochmal für die ganzen Antworten. Ich habe die Markierung als offene Frage für den Beitrag nun zurückgenommen. Für mich wäre das Thema damit geklärt. Falls wieder mal jemand vor solch einer Problematik steht oder noch Fragen zur Umsetzung hat, darf er mich gerne anschreiben.

Alle schön gesund bleiben
  Mit Zitat antworten Zitat