Здравствуйте. Погуглил для вас и нашел такой вариант решения:
procedure RunApp(str: pchar);
var
struc1: PSTARTUPINFO;
struc2: PROCESS_INFORMATION;
begin
getmem(struc1, sizeof(TSTARTUPINFO));
struc1^.lpDesktop := PChar('winsta0\default');
struc1^.dwFlags := STARTF_USESHOWWINDOW;
struc1^.wShowWindow := SW_SHOW;
CreateProcess(nil, str, nil, nil, False,
NORMAL_PRIORITY_CLASS,
nil, nil, struc1^, struc2);
end;
Помогает, но будут утечки памяти.
Майкрософт говорит использовать в вашем случае такие функции:
CreateProcessWithLogonW
CreateProcessAsUser