Ладно, всем спасибо за ответы, но я сам уже нашёл решение:
uses JwaWindows, JwsclToken, JwsclSid, JwsclStrings
procedure RunApp(str: string);
var
UserToken : TJwSecurityToken;
ConsoleUser : TJwSecurityId;
UserSidString,
UserName : TJwString;
struc1: LPSTARTUPINFO;
struc2: PROCESS_INFORMATION;
begin
getmem(struc1, sizeof(TSTARTUPINFO));
struc1^.lpDesktop := PChar('winsta0\default');
struc1^.dwFlags := STARTF_USESHOWWINDOW;
struc1^.wShowWindow := SW_SHOW;
UserToken := TJwSecurityToken.CreateWTSQueryUserToken(WTS_CURRENT_SESSION);
CreateProcessAsUser(UserToken.TokenHandle, nil,
PChar(str+' 1000'),
nil, nil, false, Create_default_error_mode, nil, nil, struc1^, struc2);
UserToken.RevertToSelf;
FreeAndNil(UserToken);
end;