AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Möglichkeit ein Programm aus einem Service zu starten
Thema durchsuchen
Ansicht
Themen-Optionen

Möglichkeit ein Programm aus einem Service zu starten

Ein Thema von DelphiManiac · begonnen am 23. Jul 2009 · letzter Beitrag vom 23. Jul 2009
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Möglichkeit ein Programm aus einem Service zu starten

  Alt 23. Jul 2009, 10:42
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 23. Jul 2009, 10:51
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Apollonius

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

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

  Alt 23. Jul 2009, 10:53
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.
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
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 23. Jul 2009, 11:34
Und leichter geht's mit der JWSCL
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#5

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

  Alt 23. Jul 2009, 11:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 23. Jul 2009, 11:41
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 23. Jul 2009, 11:47
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#8

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

  Alt 23. Jul 2009, 11:49
@Luckie & himitsu:

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


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
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

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

  Alt 23. Jul 2009, 12:22
Mehr als reine Kapselung, weil noch extra Prüfungen dazukommen. Zudem wird versucht die verschiedenen Verhaltensweisen von Windowsversionen unter einen Hut zu bringen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  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 18:29 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