AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programm aus Dienst starten die xte

Programm aus Dienst starten die xte

Ein Thema von Angel4585 · begonnen am 30. Jan 2008 · letzter Beitrag vom 30. Jan 2008
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Programm aus Dienst starten die xte

  Alt 30. Jan 2008, 07:25
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?

Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Programm aus Dienst starten die xte

  Alt 30. Jan 2008, 07:41
Hat sich erledigt, ich muss im CreateProcessAsUser das Flag CREATE_NEW_PROCESS_GROUP setzen, dann gehts.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Programm aus Dienst starten die xte

  Alt 30. Jan 2008, 08:51
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?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: Programm aus Dienst starten die xte

  Alt 30. Jan 2008, 10:03
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?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Programm aus Dienst starten die xte

  Alt 30. Jan 2008, 11:43
LogonUser erstellt eine neue LogonSession. Eine Session ist ein LUID-Typ, der den neuen eingeloggten Benutzer auszeichnet. Mit dieser Session wird man auch bei anderen Computern angemeldet. D.h. jede Session hat eine andere Remote-Anmeldung. Daher kann man auf bereits existierende Netzwerkresourcen nicht zugreifen. Man muss sie erneut erstellen.
Ü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
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf