AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Benutzerinteraktion mit Windowsdienst

Ein Thema von Tim-94 · begonnen am 3. Feb 2021 · letzter Beitrag vom 10. Feb 2021
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Tim-94
Tim-94

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

Benutzerinteraktion mit Windowsdienst

  Alt 3. Feb 2021, 14:56
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.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Benutzerinteraktion mit Windowsdienst

  Alt 3. Feb 2021, 15:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Tim-94
Tim-94

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

AW: Benutzerinteraktion mit Windowsdienst

  Alt 3. Feb 2021, 15:06
Das klingt nach dem, was ich suche

Vielen Dank schonmal für deine super schnelle Antwort, CCRDude.

Ich werde mich gleich mal ransetzen und das Ganze ausprobieren.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#4

AW: Benutzerinteraktion mit Windowsdienst

  Alt 5. Feb 2021, 17:07
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?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#5

AW: Benutzerinteraktion mit Windowsdienst

  Alt 5. Feb 2021, 18:22
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)
  • wenn es nicht eilig ist, dann ginge auch eine zeit-/eventgesteuerte Aufgabe (Programm alle x Zeit und bei Anmeldung starten, gucken ob es irgendwas gibt, anzeigen und anschließend wieder beenden)
  • ein weiterer permanenter Dienst im (aktuellen) Benutzerkontext, der dort was anzeigen kann
  • ein fremdes Programm, welches immer mitläuft und das man mitverwenden kann
    • dazu würde auch die Windows-Sidebar zählen
    • msg * Hallo Welt (das neue net send localhost Hallo Welt ) ... Achtung, das ist auch ein nur Dienst und es kann sein, dass er nicht aktiv ist, bzw. in Home/Basic ist er garnicht vorhanden
    • ein beliebiges Chat-Programm
    • oder eMail
  • oder eben ein Programm, welches vom Dienst im Benutzerkontext gestartet wird (CreateProcessAsUser und Dergleichen)
  • ein Programm, welches via Trigger vom Aufgabenplaner im Benutzerkontext gestartet wird, der vom Dienst angestoßen wurde (vielleicht ein Hardwareereignis oder Ereignis im EventLog)
  • man kann zwar einen Thread erstellen, welcher auf mit anderem Desktop verbunden ist, aber ich glaub kaum, dass sowas auch mit Desktops über verschiedene Sessions hinweg nutzbar ist.
  • 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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Feb 2021 um 18:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.287 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Benutzerinteraktion mit Windowsdienst

  Alt 5. Feb 2021, 23:59
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#7

AW: Benutzerinteraktion mit Windowsdienst

  Alt 6. Feb 2021, 05:00
Ohhh.

Hatte vorhin doch noch die Checkbox in den Einstellungen gesehn,
bzw. dachte das sei die Option für jene Funktionalität.


Ja.
https://docs.microsoft.com/en-us/ans...w-service.html

Aber genau diese Checkbox seh ich bei mir noch.
https://www.windows-faq.de/2010/01/1...ge-beseitigen/
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Feb 2021 um 05:07 Uhr)
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Benutzerinteraktion mit Windowsdienst

  Alt 6. Feb 2021, 14:57
Hi,

früher nutzte man dazu die Control Panels. Gibt es auch unter Windows 10 (siehe SysWOW64/*.cpl).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.287 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Benutzerinteraktion mit Windowsdienst

  Alt 6. Feb 2021, 15:33
früher nutzte man dazu die Control Panels. Gibt es auch unter Windows 10 (siehe SysWOW64/*.cpl).
Für ein oder zwei Jahre gibt es die vielleicht noch, ja.
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...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Benutzerinteraktion mit Windowsdienst

  Alt 6. Feb 2021, 18:02
Werden wirklich Formulare bzw. echte Anwendungen benötigt? Würden nicht Webseiten reichen? Das ist heute der übliche Weg zur Interaktion mit Diensten.
Naja wenn ich aber im Hintergrund im Info Center oder auch per Messagebox oder einem sich öffnenden Fenster informiert werden will, dann ist das nicht ganz so cool. Um Einstellungen vorzunehmen oder Logging Daten anzuschauen mögen Websites ja gut sein, aber nicht für die zuvor genannten Möglichkeiten. Auch wenn Browser mittlerweile auch gut benachrichtigen können. Ich persönlich würde wahrscheinlich aber nicht immer daran denken, beim Start meines PCs die Website zu öffnen. Und im Autostart würde ich das auch nicht drin haben wollen.

früher nutzte man dazu die Control Panels. Gibt es auch unter Windows 10 (siehe SysWOW64/*.cpl).
Für ein oder zwei Jahre gibt es die vielleicht noch, ja.
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...
[OT]
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]
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz