function CreateProcessWithLogonW(User: PWideChar;
Domain:PWideChar;
Passw:PWideChar;
Flags: DWORD;
lpApplicationName: PWideChar;
lpCommandLine: PWideChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll' name 'CreateProcessWithLogonW';
function CreateProcessAsLogon(User, Password, Domain, Prog: WideString): Cardinal;
var
lpStartupInfo: TSTARTUPINFO;
lpProcessInfo: TPROCESSINFORMATION;
begin
ZeroMemory(@lpStartupInfo, SizeOf(lpStartupInfo));
lpStartupInfo.cb := SizeOf(lpStartupInfo);
lpStartupInfo.lpDesktop := nil;
CreateProcessWithLogonW(PWideChar(User), PWideChar(Domain), PWideChar(Password), 0, nil, PWideChar(Prog), CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE, nil, nil, lpStartupInfo, lpProcessInfo);
Result := lpProcessInfo.dwProcessId;
CloseHandle(lpProcessInfo.hProcess);
end;
procedure Execute;
begin
if GetSelectedItem <> -1 then
CreateProcessAsLogon(Account, Password, Domain, StringToWideString(GetText(GetSelectedItem), 0));
end;
Запуск от имени другого пользователя
Возникла такая проблема. Есть сеть, в которой N-ое количество пользователей. Есть группы к которым эти пользователи принадлежат. Например группа пользователей интернета, общей папки, программы, етц. Программы от имени другого пользователя запускаються нормально, но не все, в чем трабл подскажите. Ниже привожу код.
Код:
Account, Password, Domain имеют тип WideString.
Так вот например, фар, интернет експлорер, кип запускаються нормально, никаких проблем. А вот опера и фаерфокс не стартуют.
Примечательно, что если оперу запустить от имени другого пользователя средствами виндовс, и потом попробовать запустить тем кодом, что я выше написал, то в опере создастся новая вкладка.
В общем направте на путь истинный.
upd:
Сейчас проверил, уже работает %) Но в чем же косяк может быть, почему до этого не запускалось?