![]() |
Programm aus Dienst starten die xte
Moin!
Ich möchte folgendes tun: Ich hab einen Dienst und möchte aus diesem heraus ein Programm starten. Ich melde mich über LogonUser als Admin an und führe das Programm mit CreateProcessAsUser aus. Das Programm wird ausgeführt und erscheint auch im Taskmanager. Steht auch dabei das es unter dem Konto Admin läuft. Soweit so gut. Das Problem: Das Programm tut absolut nichts. Ich hab nur eine kleine Funktion drin die eine Stringlist erzeugt, einen Eintrag in diese macht und diese in ne datei speichert. Wenn ich das Programm manuell starte klappt das ohne Probleme. Nur wenn ich das Programm aus dem Dienst heraus starte tut es absolut nichts. Direkt aus dem Dienst heraus kann ich jedoch ohne Probleme in eine Datei speichern. Anfangs war das Programm eine Formularanwendung, sodass ich dachte das dies nunmal einfach nciht geht. Jetzt hab ich eine Konsolenanwendung daraus gemacht in der Hoffnung das diese mehr kann, aber selbes Problem. Hab ich irgendwas übersehen? :angel: |
Re: Programm aus Dienst starten die xte
:lol: :wall: Hat sich erledigt, ich muss im CreateProcessAsUser das Flag CREATE_NEW_PROCESS_GROUP setzen, dann gehts.
|
Re: Programm aus Dienst starten die xte
Hmm.. Das programm wird jetzt zwar gestartet, auch unter dem Benutzer und es arbeitet auch.
Aber: Es hat keinen Zugriff auf die Netzlaufwerke.. der Admin hat den aber eigentlich. nutze ich jedoch die UNC-Notationen dann geht es. Sollten die Netzlaufwerke mit dem LogonUser nicht auch verfügbar werden? |
Re: Programm aus Dienst starten die xte
Da hab ich vor kurzem erst etwas drüber gelesen. Das passiert auch bei einer Elevation unter Vista, da verliert man nämlich plötzlich auch bereits eingegebene Passwörter für Netzlaufwerke etc. Vermutlich ist das ein ähnliches Problem, wenn nicht dasselbe. Kannst du mit den UNC-Pfaden leben oder sind Laufwerke notwendig?
|
Re: Programm aus Dienst starten die xte
LogonUser erstellt eine neue LogonSession. Eine Session ist ein
![]() Übrigens habe ich erfahren, dass so erstellte Programme auch keine Nachricht bekommen, wenn der Computer herunterfährt. Das muss der eigene Dienst übernehmen, die Programme zu benachrichtigen. Übrigens ist die folgende Reihenfolge von Funktionsaufrufen sehr empfehlenswert: LogonUser LoadUserProfile CreateEnvironmentBlock(p^) CreateProcessAsUser Wait for Process (ka wie das genau heißt) delete p; UnloadUserProfile für nicht Administratoren muss es so aussehen: LogonUser LoadUserProfile CreateEnvironmentBlock(p^) -hinzufügen von Benutzer in DACL von Winstation und Desktops CreateProcessAsUser Wait for Process (ka wie das genau heißt) delete p; UnloadUserProfile -entfernen von Benutzer aus DACL von Winstation und Desktops Alternative zur Änderung der W/D DACL wäre: -Hinzufügen der LogonSID des Konsolenbenutzers in die TokenGruppen LsaLogonUser(TokenGruppen) LoadUserProfile CreateEnvironmentBlock(p^) CreateProcessAsUser Wait for Process (ka wie das genau heißt) delete p; UnloadUserProfile |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz