Einzelnen Beitrag anzeigen

Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 13:03
Ja, und CreateProcessAsUser benötigt außerdem noch SeIncreaseQuotaPrivilege und SeAssignPrimaryTokenPrivilege. Aber als System-Service sollte das eigentlich funktionieren...

Hier mal ein Code den ich problemlos in einem Service verwendet hab:
Delphi-Quellcode:
var
  hToken: THandle;
  aSI: TStartupInfo;
  aPI: TProcessInformation;

  procedure ShowLastError;
  begin
    MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Error', MB_ICONERROR or MB_OK);
  end;

begin
  ZeroMemory(@aSI, SizeOf(aSI));
  aSI.cb := SizeOf(aSI);
  
  // create process as specific principal
  if cbCreateAsUser.Checked then
  begin
    if LogonUser(PChar(edUserName.Text), nil, PChar(edPassword.Text),
      LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then
    begin
      if CreateProcessAsUser(hToken, PChar(edProgramPath.Text), nil, nil, nil,
        False, NORMAL_PRIORITY_CLASS, nil, nil, aSI, aPI) then
      begin
        CloseHandle(aPI.hProcess);
        CloseHandle(aPI.hThread);
      end
      else
        ShowLastError;

      CloseHandle(hToken);
    end
    else
      ShowLastError;
  end
  // create process in system-logonsession
  else
  begin
    if CreateProcess(PChar(edProgramPath.Text), nil, nil, nil, False,
      NORMAL_PRIORITY_CLASS, nil, nil, aSI, aPI) then
    begin
      CloseHandle(aPI.hProcess);
      CloseHandle(aPI.hThread);
    end
    else
      ShowLastError;
  end;
end;
Manuel Pöter
  Mit Zitat antworten Zitat