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 Möglichkeit ein Programm aus einem Service zu starten (https://www.delphipraxis.net/137553-moeglichkeit-ein-programm-aus-einem-service-zu-starten.html)

DelphiManiac 23. Jul 2009 10:42


Möglichkeit ein Programm aus einem Service zu starten
 
Hallo,

ich habe hier schoneinmal mein Problem erläutert:
<Beitrag>

Also im Prinzip will ich folgendes machen:

Ein Hintergrundtask soll immer (nach dem Anmelden am System (XP oder Vista) aktiv sein, der soll überprüfen, ob sich ein bestimmtes USB-Gerät eingestöpselt wurde (das wird über libUSB gemacht). Die Funktionalität des Scannes soll nicht das Problem sein.

Diesen Task wollte ich als Dienst realisieren, soweit so gut, aber Ziel sollte es sein, wenn sich der USB-angeschlossen ist, dann das Programm zur Kommunikation zu starten.

So funktioniert es z.B.: bei Apples Itunes (wenn Ipod, Iphone etc eingestöpselt werden)

Nur habe ich jetzt gelesen (und auch gemerkt) das ein ShellExecute aufgrund der Rechteproblematik nicht die gewünschte Funktion bringt. (Das Programm ist im Taskmanager aktiv aber nicht sichtbar)

Meine Frage, was gibt es hier für Möglichkeiten???
P.S.: Die Suche zum Thema : TService, Programm starten etc habe ich bemüht und einige Sachen gefunden, aber keine Lösungen....

Vielen Dank schonmal

Gruß
DelphiManiac

himitsu 23. Jul 2009 10:51

Re: Möglichkeit ein Programm aus einem Service zu starten
 
Zitat:

Nur habe ich jetzt gelesen (und auch gemerkt) das ein ShellExecute aufgrund der Rechteproblematik nicht die gewünschte Funktion bringt. (Das Programm ist im Taskmanager aktiv aber nicht sichtbar)
Das Problem werden hierbei nicht die Rechte sein ... die Services laufen erstmal unter einem anderem Konto (meistens wohl das Systemkonto) und außerdem auch noch auf einem anderem "Desktop".

Du siehst aber nur deinen Desktop.


(wenn ich das so richtig verstanden hab)




Du solltest also erstmal, aus Sicherheitsgründen, dein zu startndes Programm im aktiven Benutzerkontext starten und nicht ebenfalls im Systemkonto.

Und natürlich auch auf dem aktiven Desktop.


[edit]
*runterguck*
hab ich's also richtig verstanden :angel:

Apollonius 23. Jul 2009 10:53

Re: Möglichkeit ein Programm aus einem Service zu starten
 
Am besten verwendest du MSDN-Library durchsuchenCreateProcessAsUser. Dies verwendest du folgendermaßen:
1. Hole dir mit MSDN-Library durchsuchenWTSQueryUserToken das Token des aktuell angemeldeten Benutzers - du willst dein Programm vermutlich nicht mit den Rechten des Diensts starten lassen. Falls doch, kannst du einfach mit MSDN-Library durchsuchenDuplicateToken das Token des Diensts duplizieren. Beachte, dass du für WTSQueryUserToken als System laufen musst, da du sonst kaum das TCB-Privileg haben wirst.
2. Setze mit MSDN-Library durchsuchenSetTokenInformation die Session-ID des Tokens auf MSDN-Library durchsuchenWTSGetActiveConsoleSessionId - damit erreichst du, dass das Programm auch mit dem Benutzer interagieren kann.
3. Starte mit CreateProcessAsUser dein Programm. In der STARTUPINFO-Struktur solltest du lpDesktop auf WinSta0\Default setzen, damit das Programm auf dem normalen Desktop landet.

Diese Hinweise sind nicht getestet.

Dezipaitor 23. Jul 2009 11:34

Re: Möglichkeit ein Programm aus einem Service zu starten
 
Und leichter geht's mit der JWSCL :angel:

DelphiManiac 23. Jul 2009 11:39

Re: Möglichkeit ein Programm aus einem Service zu starten
 
Hallo,

ich habe mir gerade die Jedi Lib (JWSCL) runtergeladen, reicht es hier eigentlich,
wenn ich den Pfad im BDS2006 als Source mappe? oder muss ich die JWSCL irgendwie installieren?

Viele Grüße

Luckie 23. Jul 2009 11:41

Re: Möglichkeit ein Programm aus einem Service zu starten
 
Zitat:

Zitat von himitsu
und außerdem auch noch auf einem anderem "Desktop".

Nicht nur das. Sie laufen zu dem erstmal in einer ganz anderen Windows Station. Also nicht nur in einer anderen Stadt, sondern sogar in einem anderen Land, so zu sagen. ;)

Dezipaitor 23. Jul 2009 11:47

Re: Möglichkeit ein Programm aus einem Service zu starten
 
Es gibt eine Anleitung, wie das funktioniert.
Schau bitte auf der Übersichtsseite: http://blog.delphi-jedi.net/security-library unter "set up"

Nicht nur eine andere Windowstation, sondern auch eine andere Terminal Sitzung. Also eine parallele Dimension.

DelphiManiac 23. Jul 2009 11:49

Re: Möglichkeit ein Programm aus einem Service zu starten
 
@Luckie & himitsu:

Ja genau ich muss den Ochsen von Pamplona also nicht durhc durch die Strassen sondern auch wieder nach Spanien schicken ;-)
:lol:

Gut ich werde mein Glück jetzt mal mit der JWSCL probieren, wenn ich das richtig sehe (bitte verbessern) dann ist das eine Kapselung von den ganzen Security Zugriffen unter Windows...


Viele Grüße

Dezipaitor 23. Jul 2009 12:22

Re: Möglichkeit ein Programm aus einem Service zu starten
 
Mehr als reine Kapselung, weil noch extra Prüfungen dazukommen. Zudem wird versucht die verschiedenen Verhaltensweisen von Windowsversionen unter einen Hut zu bringen.


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