Ja, das geht. Da das Passwort für den Administrator dem Programm bekannt ist, kann sich das Programm ganz normal anmelden. Am einfachsten geht das mit CreateProcessWithLogonW. Es gibt auch ein entsprechendes Kommandozeilentool "runas".
Irgendwie bekomme ich das nicht hin! "Normale" Programm starten über CreateProcessWithLogonW aber eine setup.exe wird nicht ausgeführt!
Hier mal ein Codeschnipsel:
function CreateProcessWithLogonW(
lpUsername,
lpDomain,
lpPassword
WideChar;
dwLogonFlags:dword;
lpApplicationName: PWideChar;
lpCommandLine: PWideChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
const lpStartupInfo: tSTARTUPINFO;
var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll';
function StartProgramm(Benutzer:string;Passwort:string;Doma in:string;EXE:string):boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
result:=false;
FillChar (StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
if CreateProcessWithLogonW(StringToOleStr(Benutzer),S tringToOleStr(Domain), StringToOleStr(Passwort), 0, StringToOleStr(Exe), nil, 0, nil, nil, StartupInfo, ProcessInfo) then
result:=true;
end;
Aufruf Startprogramm('admin', 'admin', '', 'c:\temp\test.exe') --> funktioniert
Aufruf Startprogramm('admin', 'admin', '', 'c:\temp\setup.exe') --> funktioniert nicht!!!
Mache ich da was falsch?
Hat jemand ein Beispiel für CreateProcessAsUser???
Danke