Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi problem mit createprocesswithlogonW (https://www.delphipraxis.net/122668-problem-mit-createprocesswithlogonw.html)

5etH 20. Okt 2008 12:32


problem mit createprocesswithlogonW
 
Hallo Zusammen,

Hab ein Problem mit createprocesswithlogonW er erkennt es nicht hab ich vill ne spezielle uses vergessen, und muss ich immer einen totalen pfad angeben oder reicht zum beispiel auch einfach nur explorer.exe

Gruß Manu

Luckie 20. Okt 2008 13:26

Re: problem mit createprocesswithlogonW
 
Es kann sein, dass Delohi die Funktion noch nicht kennt.

http://www.michael-puff.de/Artikel/C...thLogonW.shtml

PS: Eine korrekte Rechtsschreibung, Grammatik und Interpunktion würde es wesentlich vereinfachen deine Beiträge zu lesen und zu verstehen, was du eientlich willst.

5etH 20. Okt 2008 15:39

Re: problem mit createprocesswithlogonW
 
bin leider momentan auf der Arbeit und kann den Link nicht öffnen, weil in der URL "puff" vorkommt.

könnt ihr mir anders behilflich sein ?

schonmal vielen Dank
Manu

DeddyH 20. Okt 2008 15:48

Re: problem mit createprocesswithlogonW
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal die Demo runtergeladen und hänge sie hier an.

HTH

5etH 20. Okt 2008 16:45

Re: problem mit createprocesswithlogonW
 
Nochmals vielen Dank für den Upload!

Ich Habe mir jetzt was aus der Demo zusammengebastelt, und habe nun folgendes Problem:
Wenn ich mich mit meinem regulärem Benutzer aus der Domaine anmelde öffnet er mir den Explorer ohne Probleme, wenn ich aber versuche diesen als Domainadmin aufzurufen passiert nichts und ich schaff es nicht den Fehler zu lokalisieren.

Ich hoffe ihr könnt mir weiter helfen

hier mein Code
Delphi-Quellcode:
function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: LPWSTR; dwLogonFlags: dword; lpApplicationName,
  lpCommandLine: LPWSTR; dwCreationFlags: dword; lpEnvironment: pointer; lpCurrentDirectory: LPWSTR; lpStartupInfo:
  PStartUpInfoW; lpProcessInfo: PProcessInformation): boolean; stdcall; external 'advapi32.dll';


implementation

{$R *.dfm}


function CreateProcessAsLogon(const User, PW, Application, CmdLine: WideString): DWORD;
var
  si               : TStartupInfoW;
  pif              : TProcessInformation;
  s                : WideString;
begin
  ZeroMemory(@si, sizeof(si));
  si.cb := sizeof(si);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := 1;

  if CmdLine = '' then
    s := Application
  else
    s := Application + ' "' + CmdLine + '"';

  SetLastError(0);
  CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW), 0, nil, PWideChar(s), CREATE_DEFAULT_ERROR_MODE, nil,
    nil, @si, @pif);
  Result := GetLastError;
end;

procedure TForm5.ComboBox1Select(Sender: TObject);
var
  User             : WideString;
  PW               : WideString;
  err: DWORD;
begin
  User := WideString(form1.Edit1.Text);
  PW := WideString(form1.Edit2.Text);
  err := CreateProcessAsLogon(User, PW,stringgrid1.cells[0,combobox1.ItemIndex] , '');
  if err <> 0 then
    ShowMessage(SysErrorMessage(err));
end;

Schonmal vieln Dank
Gruß
Manu

Luckie 20. Okt 2008 21:27

Re: problem mit createprocesswithlogonW
 
Und warum verschweigst du nuns den Rückgabewert von GetLastError?

5etH 21. Okt 2008 07:37

Re: problem mit createprocesswithlogonW
 
momentan noch zur testzwecken aber das war auch nicht so meine frage

Luckie 21. Okt 2008 08:09

Re: problem mit createprocesswithlogonW
 
Zitat:

Zitat von 5etH
momentan noch zur testzwecken aber das war auch nicht so meine frage

:roll: Aber meinst du nicht, dass das eventuell helfen könnte den Fehler zu finden?

uwewo 21. Okt 2008 08:59

Re: problem mit createprocesswithlogonW
 
Hallo Manuel,

schau mal im Taskmanager, ob der Explorer nach Aufruf deiner Funktion dort erscheint,
aber nach kurzer Zeit wieder verschwindet.

Falls ja, starte den Explorer mit folgenden Parametern 'Explorer.exe /e,/separate,c:\'
So ein Problem hatte ich damals auch, und habe es auf diese Art gelöst.

Uwe

5etH 21. Okt 2008 15:26

Re: problem mit createprocesswithlogonW
 
ja aber wie kann es denn sein das wenn ich als user mich (domainaccount) angebe es dann funzt, und bei dem domainadmin nicht ? ... finde ich seltsam

Luckie 21. Okt 2008 18:17

Re: problem mit createprocesswithlogonW
 
Zitat:

Zitat von 5etH
ja aber wie kann es denn sein das wenn ich als user mich (domainaccount) angebe es dann funzt, und bei dem domainadmin nicht ? ... finde ich seltsam

Du willst keine Hilfe oder? Denn genau das könnte uns der Rückgabeert von GetLastError verraten.

Also ich klinke mich hier aus. Ich bin ja bereit zu helfen, aber ich habe keine Lust um Informationen betteln zu müssen, nur um helfen zu können.

Dezipaitor 21. Okt 2008 20:04

Re: problem mit createprocesswithlogonW
 
Ich kann diese Funktion eh nicht empfehlen, da sie eine Menge Probleme hat.

ringli 21. Okt 2008 20:35

Re: problem mit createprocesswithlogonW
 
Welche würdest du denn für diesen Zweck empfehlen?

Dezipaitor 21. Okt 2008 20:47

Re: problem mit createprocesswithlogonW
 
Ab XP immer LogonUser und CreateProcessAsUser.

Luckie 21. Okt 2008 23:50

Re: problem mit createprocesswithlogonW
 
Warum kannst du sie nicht empfehlen? Deine Methode funktioniert aber unter 200 und NT nicht, da dem Benutzer die nötigen Privilegien fehlen, um LogonUser erfolgreich aufzurufen.

uwewo 22. Okt 2008 08:24

Re: problem mit createprocesswithlogonW
 
Zitat:

Zitat von Luckie
Du willst keine Hilfe oder? Denn genau das könnte uns der Rückgabeert von GetLastError verraten.

Hi Luckie,

es kann durchaus sein, dass er keinen Fehler durch GetLastError erhält, so war es damals bei mir.
In unserer Firma gibt es Domain Admins, aber auch Lokale Admins natürlich mit unterschiedlichen Rechten. Jedesmal wenn ich den Explorer über CreateProcessAsLogon gestarte habe, wurde der Explorer in der Tasklist zwar angezeigt, dieser Task wurde allerdings von Windows nach ein paar Sekunden einfach wieder entfernt. Vielleicht liegt es auch an den Policies im Active Directory, bin leider kein Domain Admin.

Erst als ich den Explorer in einem separaten Task gestartet habe(daher der Parameter /e,/separate,)
funktionierte das starten des Programms problemlos.

Das ganze hat allerdings auch einen Nachteil, man muss dieses Explorer Fenstet immer manuell aktualisieren nach kopieren, löschen etc. da es nicht automatisch geschieht.

Zitat:

Zitat von Dezipaitor
Ich kann diese Funktion eh nicht empfehlen, da sie eine Menge Probleme hat.

Ich kann mich Deiner Meinung leider nicht anschliessen, mein Programm wird derzeit in 46 Standorten
weltweit von den lokalen Admins seit ca. 1,5 Jahren eingesetzt, und ich hatte noch keine negative Resonanz.

Uwe

Dezipaitor 22. Okt 2008 10:02

Re: problem mit createprocesswithlogonW
 
Zitat:

Zitat von uwewo
es kann durchaus sein, dass er keinen Fehler durch GetLastError erhält, so war es damals bei mir.
In unserer Firma gibt es Domain Admins, aber auch Lokale Admins natürlich mit unterschiedlichen Rechten. Jedesmal wenn ich den Explorer über CreateProcessAsLogon gestarte habe, wurde der Explorer in der Tasklist zwar angezeigt, dieser Task wurde allerdings von Windows nach ein paar Sekunden einfach wieder entfernt. Vielleicht liegt es auch an den Policies im Active Directory, bin leider kein Domain Admin.

Erst als ich den Explorer in einem separaten Task gestartet habe(daher der Parameter /e,/separate,)
funktionierte das starten des Programms problemlos.

Ohne diese Parameter sendet der WindowsExplorer eine Nachricht, die dann im alten Prozess ein neues Fenster erstellt. Der neue Explorer beendet sich dann selbst. Es hat irgendetwas mit COM Rechten zu tun, die es verhindern, dass eine Nachricht empfangen werden kann (so oder so ähnolich). Der neue Explorer beendet sich dann erfolgreich. Daher kein Fehler.

Zitat:

Zitat von uwewo
Das ganze hat allerdings auch einen Nachteil, man muss dieses Explorer Fenstet immer manuell aktualisieren nach kopieren, löschen etc. da es nicht automatisch geschieht.

Das ist ein bekannter Fehler vom Explorer.

Zitat:

Zitat von uwewo
Ich kann mich Deiner Meinung leider nicht anschliessen, mein Programm wird derzeit in 46 Standorten
weltweit von den lokalen Admins seit ca. 1,5 Jahren eingesetzt, und ich hatte noch keine negative Resonanz.

Schau dir die Kommentare bei der Funktion der MSDN an. Besonders den von mir.

Dein Programm ist vom sekundären Anmeldedienst abhängig. Ist dieser abgeschaltet, funktioniert die Funktion nicht mehr.

Besonders heftig :
Wenn man den Dienst abstellt oder er abstürzt, dann werden die damit gestarteten Programme beim Abmelden (lokale Konsole) nicht geschlossen und stehen dem nächsten Benutzer zur Verfügung.

5etH 22. Okt 2008 10:05

Re: problem mit createprocesswithlogonW
 
ich werde es sobald ich wieder gesund und an der Arbeit bin mal ausprobieren ... kann es sein das ich das Problem dann auch mit anderen Programmen bekommen kann z.B. Internet Explorer?

gruß Manuel

Dezipaitor 22. Okt 2008 21:27

Re: problem mit createprocesswithlogonW
 
Das Problem existiert immer für alle Programme, die diese Funktion benutzen, z.B. auch für den Kontextmenüeintrag "Ausführen als..." im Explorer. Auch wenn man den Dienst deaktiviert, kann man diesen Menüeintrag nicht mehr verwenden.

Hier die Übersicht, was es für Probs mit CreateProcessWithLogonW gibt:
  • Diese Funktion funktioniert nicht in einem Service!
  • Sie funktioniert auch dann nicht, wenn der "Sekundäre Anmeldedienst deaktiviert ist".
  • Stürzt der Dienst ab, und der Benutzer meldet sich ab und einer Neuer meldet sich an (z.B. Gast), dann bleiben alle Anwendungen, die mit dieser Fkt gestartet wurde (vllt sogar als Administrator), für den neuen Benutzer zugänglich. Siehe auch "Warum Surun CreateProcessWithLogonW nicht mehr benutzt."
  • Sie umgeht Einschränkungen auferlegt durch einen Job für den aktuellen Prozess. (Out of the "Sandbox")
  • Anwendungen, die ihre Daten bei der Nachricht WM_QUERYENDSESSION oder WM_ENDSESSION, ihre Daten sichern oder sonstige wichtige Tätigkeiten machen wollen (z.B. Shutdown verhindern, wegen CD-Brennen), funktionieren nicht richtig, da diese Nachrichten nicht von diesen Apps empfangen werden.
  • Es gibt einige Probleme auf einigen Systemen mit dem lpDesktop in StartupInfo.

5etH 24. Okt 2008 07:54

Re: problem mit createprocesswithlogonW
 
Also... mit den Parametern funktioniert es jetzt trotzdem habe ich nun meine Bedenken bezüglich der von mir gewälten methode und ich werde anfangen es mit CreateProcessAsUser probieren, da wir keine systeme hier haben die älter als XP sind

ringli 26. Okt 2008 22:09

Re: problem mit createprocesswithlogonW
 
@Dezipaitor:

Könntest du vielleicht mal ein funktionierendes Beispiel für LogonUser & CreateProcessAsUser posten? Alles was ich bisher so gefunden habe scheitert an den fehlenden Rechten. Dürfte für einige Leute sehr interessant sein und wäre mit Sicherheit etwas für die Codelib.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 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 by Thomas Breitkreuz