Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Aus e. Dienst ein Programm im Kontext des akt. Users starten (https://www.delphipraxis.net/101384-aus-e-dienst-ein-programm-im-kontext-des-akt-users-starten.html)

Whookie 12. Okt 2007 09:26


Aus e. Dienst ein Programm im Kontext des akt. Users starten
 
Hallo zusammen!

Ich habe einen Dienst geschrieben der über Indy/TCP ferngesteuert Programme starten kann (hausintern als Unterstützung in Verbindung mit unserer Web-Plattform). Allerdings starten die Programme als SYSTEM, was für Word oder Excel ein Problem darstellt.

Ich mache das mit ShellExecute und habe natürlich mittlerweile auch CreateProcessAsUser gefunden. Mit CreateProcessAsUser habe ich aber das Problem, dass ich dann mit LogonUser erst mal ein Token besorgen müsste.. aber ... ich will eigentlich keinen User anmelden!

Ist kein User angemeldet sollte der Dienst gar nichts machen (abgesehen davon, das der Dienst nur über die Interaktion im Browser aktiv werden kann). Auch mehrere angemeldete aber inaktive User interessieren mich nicht, letzlich würde ich das Token vom momentan am Rechner arbeitenden User brauchen, um damit dann z.B.: Word zu starten und die im Browser angewählte Datei darin zu öffnen...

Natürlich wäre es noch besser, wenn ich weiterhin ShellExecute verwenden könnte, denn ich will eigentlich auch nicht vorgeben mit welchem Programm eine Datei geöffnet wird, sondern sie eben mit der im System dafür registrierten Anwendung öffnen.

Bernhard Geyer 12. Okt 2007 09:33

Re: Aus e. Dienst ein Programm im Kontext des akt. Users sta
 
Ab Vista ist es Standardmäßig (trotz Haken mit Interaktion) nicht mehr möglich auf den Desktop des angemeldeten Benutzers zu kommen. Du wirst nicht darum herumkommen dafür eine Anwendung zu schreiben die im Autostart läuft und dann mit dem Dienst kommuniziert.

OregonGhost 12. Okt 2007 09:39

Re: Aus e. Dienst ein Programm im Kontext des akt. Users sta
 
Es gab in der DP jüngst einen englischsprachigen Thread zu dem Thema, der mehr oder weniger zu einer Lösung gekommen ist. Ich persönlich finde eine Lösung, wie Bernhard sie vorgeschlagen hat, jedoch schöner.

Whookie 12. Okt 2007 14:39

Re: Aus e. Dienst ein Programm im Kontext des akt. Users sta
 
Zitat:

Zitat von Bernhard Geyer
... Du wirst nicht darum herumkommen dafür eine Anwendung zu schreiben die im Autostart läuft und dann mit dem Dienst kommuniziert.

Okay, das ganze soll später natürlich auch mal auf Vista (oder vielleicht auch erst auf seinem Nachfolger) laufen. Also mache ich einen Dienst, der wie bisher TCP macht und bei Bedarf ein Programm startet, das dann das eigentliche Programm startet?

Autostart finde ich nicht so gut, dann muss man die ganze Zeit "unabsichtlich" gelöschte Links reparieren... ein Dienst hat halt den Vorteil, das er - einmal installiert - brav seinen Dienst verrichtet.

Apollonius 12. Okt 2007 14:41

Re: Aus e. Dienst ein Programm im Kontext des akt. Users sta
 
"Bei Bedarf startet". Das ist ja gerade der Witz, der Service startet eben nicht das Starter-Programm, sondern es muss selbst laufen.

Whookie 12. Okt 2007 14:54

Re: Aus e. Dienst ein Programm im Kontext des akt. Users sta
 
Zitat:

Zitat von Apollonius
"Bei Bedarf startet". Das ist ja gerade der Witz, der Service startet eben nicht das Starter-Programm, sondern es muss selbst laufen.

Das heißt, der Dienst schaut nur mehr nach, ob das Starter-Programm läuft ... aber was macht er, wenn nicht?? Denn Benutzer verständigen darf er ja nicht ... das Starterprogramm starten darf er nicht ... :wall: ??

Apollonius 12. Okt 2007 15:04

Re: Aus e. Dienst ein Programm im Kontext des akt. Users sta
 
Folglich solltest du die Lösung aus dem englischsprachigen Thread nehmen: WTSQueryUserToken und CreateProcessAsUser.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 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