![]() |
ShellExecute vererbt (neuerding?) Admin-Rechte
Ich verwende schon ewig ShellExecute um eine andere Exe zu starten.
Und ich bin mir fast zu 100% sicher das früher das Admin-Recht nicht vererbt hat. Also eine (Installer-)Exe die Adminrechte hat starte mit ShellExecute eine zweite Exe. Diese hatte immer keine Adminrechte. Jetzt scheint es aber so zu sein das sich hier die WinAPI geändert hat und der neue Prozess Adminrechte hat. Die Frage ist nun: Wie startet man korrekt eine andere Exe ohne das die Rechte vererbt werden. Der gestartete Prozess soll nur die Rechte bekomme die er hätte wenn sein Icon auf dem Desktop gestartet wird? |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Ich finde es auf die Schnelle nicht wieder, aber IIRC gab es im Bezug auf die Rechte einen Unterschied, ob man ShellExecute oder CreateProcess benutzt.
|
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Zitat:
Jedenfalls war ich bisher immer Felsenfest davon überzeugt das es so ist. |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
|
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Weil SHELLEXECUTE keine Rechte erbt, gibt es RUNASADMIN mit SHELLEXECUTEEX:
Das damit gestartete Programm hat dann die mitgegebenen Rechte.
Delphi-Quellcode:
// RunAsAdmin(Handle, ExtractFilepath (Application.ExeName) + 'FileAccessCopy.exe', strParams);
procedure RunAsAdmin(hWnd: HWND; aFile: string; aParameters: string); var sei: TShellExecuteInfo; begin FillChar(sei, SizeOf(sei), 0); sei.cbSize := sizeof(sei); sei.Wnd := hWnd; sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI; sei.lpVerb := 'runas'; sei.lpFile := PChar(aFile); sei.lpParameters := PChar(aParameters); sei.nShow := SW_HIDE; // SW_SHOWNORMAL; SW_HIDE; if not ShellExecuteEx(@sei) then RaiseLastOSError; end; |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
das geht auch mit dem normalen ShellExecute mit 'runas' statt 'open'.
Aber sein Problem ist ja genau das Gegenteil, Rechte werden vererbt, was er nicht will. |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Zitat:
Hab da einen Eintrag gefunden der das Problem beschreibt: ![]() Und im Verlinkten Blog-Eintrag ![]() |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Bei MS gibt auch einen Eintrag:
![]() Leider wurden die Links auf dem Server wieder alle umgestellt so das man das einfache Beispiel nicht mehr findet. :cry: Und jetzt das SDK zu installieren wollte ich vermeiden ... |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Beim Befehl (nicht Operation) RUNAS kann man auch den Benutzer angeben, welcher natürlich nicht unbedingt der Administrator sein muß.
Ansonsten halt CreateProcess, mit einem Token der Rechte des Benutzers. |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Zitat:
OK. Befehl(!) überlesen .... |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
siehe /user
![]() ![]() Ich bin als Frank angemeldet, bzw. das Programm läuft als Frank, Administrator oder sonstwer und man kann damit das andere Programm nun als Lisa, Paul, Administrator oder Meier starten. Man braucht nun also nur noch den Namen des angemeldeten Benutzers. Oder eben dessen Token, für den anderen Befehl. |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Kaum hat man den C-Code umgesetzt, schon verwendet man zufälligerweise den RIchtigen Suchbegriff und kommt auf schon fertigen Quellcode:
![]() |
AW: ShellExecute vererbt (neuerding?) Admin-Rechte
Keine Ahnung, ob ich was anders mache, aber bei mir wurden die Rechte bei ShellExecuteEx schon immer vererbt, ob mit oder ohne UAC. Ich habe diese Erfahrung mit meinen "Installer"-Komponenten gemacht, bei der 3 separate Programme beteiligt sind und eines davon die anderen beiden startet. Ist Programm A elevated gestartet und ruft via ShellExecuteEx Programm B, so ist auch B elevated. Und bei RunAs gilt das sowieso, weil alles als komplett anderer Nutzer läuft.
MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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