Hallo,
ich muss aus einer Delphi XE7 Anwendung heraus externe Programme (exe-Dateien wie z.B. Totalcommander, Testprogramme für serielle Ports, aber auch elevated (=Admin Rechte nötig!) wie z.B. control (Systemsteuerung), Regedit etc. aufrufen).
Bisher sind unsere Windows 7 Stationen so konfiguriert, das die UAC (Benutzerkontensteuerung) abgeschaltet ist.
Mittels
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| CreateProcessWithLogonW(PWideChar(WideString(sUser)), PWideChar(WideString(sDomain)), PWideChar(WideString(sPassword)), LOGON_WITH_PROFILE, nil, PWideChar(WideString(sCommand)), CREATE_UNICODE_ENVIRONMENT, pEnvironmentBlock, aPath, rStartupInfo, rProcessInformation) |
starten wir die externen Programme mit einem speziellen AD Benutzer (sUser,sDomain,sPassword).
Funktioniert einwandfrei schon seit Jahren.
Jetzt steht ins Haus, das wir die UAC aktivieren müssen.
Das starten der externen Programme mit dem angegebenen User funktioniert immer noch, ALLERDINGS sind diese nicht mehr elevated, d.h. die Rechte für Control, Regedit etc. fehlen.
Ich habe einige Versuche mit ShellExecuteEx gemacht; damit klappt der Start elevated, aber ich finde keinen Weg zur Übergabe von Benutzername und Kennwort (d.h. es geht immer ein Anmeldedialog auf):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| FillChar(SEI, SizeOf(SEI), 0); SEI.cbSize := SizeOf(SEI); SEI.fMask := SEE_MASK_NOCLOSEPROCESS; {$IFDEF UNICODE} SEI.fMask := SEI.fMask or SEE_MASK_UNICODE; {$ENDIF} SEI.Wnd := AWnd; SEI.lpVerb := 'runas'; SEI.lpFile := PChar(Host); SEI.lpParameters := PChar(Args); SEI.nShow := SW_NORMAL;
if not ShellExecuteEx(@SEI) then .... |
Hat jemand einen Tipp, wie man erfolgreich bei aktiver UAC aus einem Delphi Programm heraus
-ein externes Programm (exe Datei)
-mit Übergabe von Benutzername & Kennwort
-elevated d.h. mit Administratorrechten
-ohne Anmeldedialog; ein Administrator-Bestätigungsdialog wäre in Ordnung (also quasi nur "ok" klicken)
aufruft?
Vielen Dank