AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Programm aus Dienst herraus Beenden/Starten usw.
Thema durchsuchen
Ansicht
Themen-Optionen

Programm aus Dienst herraus Beenden/Starten usw.

Ein Thema von xSkaschY · begonnen am 19. Jul 2008 · letzter Beitrag vom 21. Jul 2008
Antwort Antwort
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#1

Programm aus Dienst herraus Beenden/Starten usw.

  Alt 19. Jul 2008, 18:57
Hallo zusammen,

ich habe hier, in welchem Thread genau weiß ich gerade nicht mehr, gelesen das dies nicht wirklich möglich sei, wenn der Dienst nicht im Interaktiven Modus oder als System-Benutzer läuft.

Frage, wie kann ich dennoch ein Programm welches auf dem Desktop läuft, über den Dienst killen und starten, so das ich das auf den Desktop des jeweiligen Benutzer zusehen bekomme. (RunAs?) Wird von verschiedenen Quellen als Deprecated deklariert, ggf. aus Sicherheitsrelevanten Aspekten?

Solutions?

LG Toby

- Btw: Der Dienst wird ausschliesslich unter Windows 2003 Server im Einsatz sein.
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Programm aus Dienst herraus Beenden/Starten usw.

  Alt 19. Jul 2008, 21:17
Der einfachste Weg dürfte über CreateProcessWithLogonW sein.
CreateProcess reicht hier nicht, du möchtest ja nicht alle Anwendungen mit Systemrechten starten.

Soll dein Programm auch unter nt 4 laufen musst du mit LogonUser und CreateProcessAsUser arbeiten.
Allerdings musst du hier alles manuell laden (Benutzerdaten...)

Wenn du kein Passwort eingeben lassen willst kannst du dir auch ein Token von einem unter dem Benutzerkonto laufendem Prozess schnappen mit DuplicateToken clonen und an CreateProcessAsUser übergeben.

Damit die Programme auf dem richtigen Desktop angezeigt werden musst du den in den StartupInformationen angeben.
Zusätzlich musst du dem betreffenden Benutzer natürlich Zugriffsrechte auf den Desktop einräumen. Sonst gibts nen Fehler.
Wenn bereits Programme unter dem Benutzerkonto laufen, hat der betreffende Benutzer natürlich die entsprechenden Rechte, also fällt dieser Schritt weg.


Das Beenden von Prozessen sollte doch eigentlich genauso funktionieren, wie mit nem normalen Prozess.
Allerdings musst du aufpassen, dass nicht aufeinmal jeder alle Programme beenden kann!!!

Vielleicht auch von einem Programm Beenden lassen, dass du mit der oben beschreibenen Methode gestartet hast. Alles Andere führt zu Sicherheitsproblemen.

MfG
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Apollonius

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

Re: Programm aus Dienst herraus Beenden/Starten usw.

  Alt 19. Jul 2008, 21:29
Ohne System-Rechte wird es schwierig. Der normale Weg benötigt das TCB-Privileg (welches normalerweise nur der Benutzer System hat), um WTSQueryUserToken aufrufen zu können, welches das Token des angemeldeten Benutzers zurückgibt. Dieses kann man dann mit CreateProcessAsUser verwenden.
Der Desktop ist kein Problem - er lässt sich in der STARTUPINFO-Struktur angeben.
Interaktivität benötigst du nicht.
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
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Programm aus Dienst herraus Beenden/Starten usw.

  Alt 20. Jul 2008, 07:13
Danke, werd mir das mal anschauen! Melde mich dann nochmal wenn ich erste Erfloge verzeichnen kann.
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Programm aus Dienst herraus Beenden/Starten usw.

  Alt 21. Jul 2008, 12:52
Hy,

mit folgendem Code beende ich Tasks aus meinem Systemdienst:

Delphi-Quellcode:
function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE=$0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  result := 0;

  FSnapshotHandle := CreateToolhelp32Snapshot
                     (TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
                                 FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
         UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
         UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(OpenProcess(
                        PROCESS_TERMINATE, BOOL(0),
                        FProcessEntry32.th32ProcessID), 0));
    ContinueLoop := Process32Next(FSnapshotHandle,
                                  FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
Das Starten eines Programms aus einem Dienst mit Benutzerrechten ist mir bisher (leider) noch nicht gelungen. Ich benötige allerdings auch Windows 2000 Kompatibilität.

KUBA
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Programm aus Dienst herraus Beenden/Starten usw.

  Alt 21. Jul 2008, 14:47
Jwscl implementiert JwCreateProcessInSession

Die aktualisierte Version im SVN trunk Ordner funktioniert auch unter Windows 2000 Workstation.

Delphi-Quellcode:
{[B]JwCreateProcessInSession[/B] creates a new process in a user's session using various ways to
achieve success.
This procedure needs JwInitWellKnownSIDs to be called.
To run a process in another session you need to have SYSTEM rights.


@param ApplicationName defines the application to be run in the session
@param CommandLine defines the parameters for the application
@param CurrentDirectory defines the start folder of the app. 
@param SessionID defines the target session where the new application is to be started.
@param CreationFlags defines creation flags that are delivered to CreateProcess parameter with
same name
@param Desktop defines the target windowstation and desktop name. If empty
the default target is "winsta0\default"
@param StartupInfo defines startup info delivered to to CreateProcess parameter with
same name. Don't forget to initialize the structure first before calling this procedure.
<code lang="delphi>
ZeroMemory(@StartupInfo, sizeof(StartupInfo));
</code>
@param WaitForProcess defines whether the procedure should wait for the process to end
and clean up all allocated resources or just return to the caller. In last case
the caller is responsible to free the returned token, the environment block and
the users profile
@param Output contains returned data in case parameter WaitForProcess is false.
The caller is responsible to free the contained member allocation
@param LogServer receives a log server instance. It is used to log events for
mostly debugging purposes. If this parameter is nil, no events are logged 

raises
EJwsclProcessIdNotAvailable:  will be raised if no token could be found
for the given SessionID
EJwsclNilPointer: will be raised if JwInitWellKnownSIDs was not called before
}
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 06:33 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