AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Aus e. Dienst ein Programm im Kontext des akt. Users starten
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Whookie · begonnen am 12. Okt 2007 · letzter Beitrag vom 12. Okt 2007
Antwort Antwort
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#1

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

  Alt 12. Okt 2007, 09:26
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.
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 12. Okt 2007, 09:33
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#3

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

  Alt 12. Okt 2007, 09:39
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#4

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

  Alt 12. Okt 2007, 14:39
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.
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 12. Okt 2007, 14:41
"Bei Bedarf startet". Das ist ja gerade der Witz, der Service startet eben nicht das Starter-Programm, sondern es muss selbst laufen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#6

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

  Alt 12. Okt 2007, 14:54
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 ... ??
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 12. Okt 2007, 15:04
Folglich solltest du die Lösung aus dem englischsprachigen Thread nehmen: WTSQueryUserToken und CreateProcessAsUser.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:39 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