AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Aus einem Dienst auf Programme des Benutzers zugreifen?
Thema durchsuchen
Ansicht
Themen-Optionen

Aus einem Dienst auf Programme des Benutzers zugreifen?

Ein Thema von Jakson · begonnen am 30. Nov 2009 · letzter Beitrag vom 30. Nov 2009
Antwort Antwort
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#1

Aus einem Dienst auf Programme des Benutzers zugreifen?

  Alt 30. Nov 2009, 10:14
Hallo liebe Delphi-PRAXIS.

Euer Forum ist echt eine goldene Fundgrube nur jetzt steh ich an.

Mein Problem: Ich benötige einen Windows Dienst der mir Programme startet und überwacht ob die auch brav laufen.

Soweit so gut. Unter XP ist das ja alles kein Problem. Nur sobald VISTA oder Win7 ins Spiel kommen gibt's Probleme.



Dort dürfen Dienste und Programme die von diesem gestartet wurden nicht mehr mit dem Desktop des Benutzers kommunizierten. Also meine Idee war die Programme einfach unter dem angemeldeten Benutzer laufen zu lassen. Gesagt getan mit CreateProcessAsUser kein Problem.

Nur wenn der Dienst jetzt das geöffnete Programm wieder schließen möchte hapert's.
Da das zu öffnende Programm immer diverse Dateien geöffnet hat und auch in diesen fleißig schreibt kann ich kein TerminateProcess verwenden. Damit würgt man das Programm einfach ab und die Dateien bleiben offen bzw. die Daten im Speicher die noch nicht geschrieben wurden gehen verloren.

Aber da gibt's ja noch das SendMessage(WinHandle, WM_CLOSE,...). Dazu wird allerdings das Handle auf das Fenster benötigt. Dieses lässt sich mit EnumWindows auch einfach herausfinden.
Allerdings bekomme ich da nur Fenster des eigenen Desktops. Also wenn das der Dienst ausführt eben nur Fenster die von "NT-AUTORITÄT\SYSTEM" geöffnet wurden.

Aber zum Glück gibt's da noch das EnumDesktopWindows nur woher ein gültiges Handle auf einen Desktop nehmen. Mit EnumWindowStations und dem nachfolgenden EnumDesktops lässt sich so eines ermitteln nur bekomme ich dabei eben auch alles andere nur nicht den Desktop des Benutzers.

Mit
Delphi-Quellcode:
  StationHandle := OpenWindowStation('WinSta0', False, MAXIMUM_ALLOWED);
  if SetProcessWindowStation(StationHandle) then
    DesktopHandle := OpenDesktop('Default', 0, False, MAXIMUM_ALLOWED);
konnte ich dann endlich auf den richtigen Desktop zugreifen das allerdings wieder nur unter XP.
Bei VISTA oder Win7 bekomme ich immer nur den Desktop von "NT-AUTORITÄT\SYSTEM".

Jetzt meine Frage: Gibt's da irgendwas das ich übersehen habe oder funktioniert das einfach unter VISTA überhaupt nicht mehr?

Aja anbei mein Demo Programm zum Testen (Allerdings fürs Delphi 2009).

Ich hoffe ich habe alle benötigten Dateien mit dazu kopiert.
Verwendet werden VirtualTrees, JWSCL und eine eigene Soket Komponente.


Danke im Voraus Jakson
Angehängte Dateien
Dateityp: zip remote_processlist_bin_732.zip (1,24 MB, 8x aufgerufen)
Dateityp: zip remote_processlist_jwawindows_154.zip (2,10 MB, 6x aufgerufen)
Dateityp: zip remote_processlist_code_886.zip (1,08 MB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Aus einem Dienst auf Programme des Benutzers zugreifen?

  Alt 30. Nov 2009, 10:27
Zitat von Jakson:
Jetzt meine Frage: Gibt's da irgendwas das ich übersehen habe oder funktioniert das einfach unter VISTA überhaupt nicht mehr?
Nö, Du hast da nichts übersehen. Siehe auch:

http://www.microsoft.com/whdc/system.../services.mspx
Fridolin Walther
"While Mr. Kim, by virtue of youth and naiveté, has fallen prey to the inexplicable need for human contact, let me step in and assure you that my research will go on uninterrupted, and that social relationships will continue to baffle and repulse me."
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Aus einem Dienst auf Programme des Benutzers zugreifen?

  Alt 30. Nov 2009, 10:28
Such doch im Forum einfach mal nach Hier im Forum suchenCreateProcessAsUser.
Diese Frage hatten wir schon öfters.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Aus einem Dienst auf Programme des Benutzers zugreifen?

  Alt 30. Nov 2009, 10:40
Du musst ein separaten Überwachungsprozess pro Sitzung (Session) starten (mit CPAU). Der sollte kein Fenster zu haben.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#5

Re: Aus einem Dienst auf Programme des Benutzers zugreifen?

  Alt 30. Nov 2009, 10:42
Danke für die schnelle Antwort.

Das Starten der Programme funktioniert eh.
Nur wie schließe ich das Programm wieder?
Dazu benötige ich eben das WindowHandle.
So wie in Delphi für Win32 Mit der ProcessID (PID) an das WindowHandle kommen? beschrieben funktioniert es eben als dienst nicht.

Und was ich vergessen habe gibt's eine Möglichkeit ein laufendes Programm von Systemkonto auf den Desktop eines Benutzers zu verschieben ohne es dabei zu schließen.

Danke jakson
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Aus einem Dienst auf Programme des Benutzers zugreifen?

  Alt 30. Nov 2009, 10:45
Zitat von Jakson:
Und was ich vergessen habe gibt's eine Möglichkeit ein laufendes Programm von Systemkonto auf den Desktop eines Benutzers zu verschieben ohne es dabei zu schließen.
Nein, existiert nicht.

Hast Du überlegt statt eine Message zu verschicken einen anderen Mechanismus zu benutzen? Ein Event z.B. das vom Service signalisiert werden kann, wenn sich die Anwendungen schließen sollen.
Fridolin Walther
"While Mr. Kim, by virtue of youth and naiveté, has fallen prey to the inexplicable need for human contact, let me step in and assure you that my research will go on uninterrupted, and that social relationships will continue to baffle and repulse me."
  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 12:20 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