данная функция спользуется процессом под учеткой system для запуска другого процесса под учеткой юзера. проблема в том, что под uac (win7, дефолтный уровень uac) не работает, getlasterror возвращает 720ю ошибку. пробовал поиграть с token, не вышло..
function RunProcessAsCurrentUser(FileName: string): Boolean;
var
ProcessId: Integer;
hWindow, hProcess, TokenHandle: THandle;
si: Tstartupinfo;
p: Tprocessinformation;
begin
Result := False;
hWindow := FindWindow('Progman', 'Program Manager');
GetWindowThreadProcessID(hWindow, @ProcessID);
hProcess := OpenProcess (PROCESS_ALL_ACCESS, FALSE, ProcessID);
if OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, TokenHandle) then
begin
FillChar(si,SizeOf(si),0);
with Si do begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := SW_NORMAL;
lpDesktop := PChar('winsta0\default');
end;
Result := CreateProcessAsUser(TokenHandle, nil,
PChar(FileName),
nil, nil, false, Create_default_error_mode, nil, nil, si, p);
end;
end;