Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из службы запустить программу? [D5, D6, D7, NT4, Win2k, WinXP]


Страницы:   1 2

Дармидон ©   (2005-01-10 12:52:00) 

Как из службы (именно из службы /TService/) запустить программу?


BiN   (2005-01-10 15:08:00) [21]

kaZaNoVa ©   (10.01.05 14:51) [6]

В твой код не предоставляет пользователю возможность "юзать прогу, запушенную с его правами". Пользователь в таком виде вообще не сможет "юзать прогу", ибо весь (возможный) вывод будет осуществляться на десктоп сервисов.


kaZaNoVa   (2005-01-10 14:51:00) [22]

Игорь Шевченко ©   (10.01.05 14:48) [5]
если он хочет запустить прогу не от имени SYSTEM(или какой-та, от которой сервис работает)
так как нормальный юзер должен юзать прогу, запушенную с его правами:))


Игорь Шевченко   (2005-01-10 14:48:00) [23]

kaZaNoVa ©   (10.01.05 14:41) [4]

Ну и нафига такие извращения ?


kaZaNoVa   (2005-01-10 14:41:00) [24]

unit ProcessWithLogon;

interface

uses Windows, SysUtils;

const
 LOGON_WITH_PROFILE         = $1;
 LOGON_NETCREDENTIALS_ONLY  = $2;

function CreateProcessWithLogonW(
 UserName,
 Domain,
 Password: PWideChar;
 dwLogonFlags: DWORD;
 lpApplicationName,
 lpCommandLine: PWideChar;
 dwCreationFlags: DWORD;
 lpEnvironment: Pointer;
 lpCurrentDirectory: PWideChar;
 const lpStartupInfo: TStartupInfo;
 var lpProcessInformation: TProcessInformation): BOOL; stdcall;

function StartProcessWithLogon(
      const  strUsername,     // Логин
             strDomain,       // Домен
             strPassword,     // Пароль
             strCommandLine: WideString  // запускаемая программа с путем к ней
): Boolean;

implementation

function CreateProcessWithLogonW; external advapi32 name 'CreateProcessWithLogonW';

function StartProcessWithLogon(
      const  strUsername,     // Логин
             strDomain,       // Домен
             strPassword,     // Пароль
             strCommandLine: WideString  // запускаемая программа с путем к ней
): Boolean;
var
 pi: TProcessInformation;
 si:TStartupInfo;
 bResult: boolean;
 St: string;

begin
 Result := False;

 ZeroMemory(@si,sizeof(TSTARTUPINFO));
 si.cb:= sizeof(TSTARTUPINFO);
 si.lpDesktop:=nil;

 bResult := CreateProcessWithLogonW(
   PWideChar(strUsername),
   PWideChar(strDomain),
   PWideChar(strPassword),
   LOGON_WITH_PROFILE,
   PWideChar(strCommandLine),
   nil,
   0,
   nil,
   nil,
   si,
   pi
 );
 if not bResult then
 begin
   St := SysErrorMessage(Windows.GetLastError);
   MessageBox(0, PAnsiChar(St), 'Ошибка!', MB_OK or MB_ICONERROR)
 end
 else
 begin
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess);
 end;

 Result:=bResult;
end;

end.


юзать так
procedure TForm1.Button2Click(Sender: TObject);
//Var U,P,d,c:WideChar;
begin
StartProcessWithLogon(Edit1.Text,Edit4.Text,Edit2.Text,Edit3.Text);
end;


Игорь Шевченко   (2005-01-10 13:23:00) [25]

Gero ©   (10.01.05 13:20) [2]

CreateProcess, однако.

С уважением,


Gero   (2005-01-10 13:20:00) [26]

ShellExecute


BiN   (2005-01-10 13:11:00) [27]

Также, как и из любого другого процесса


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо