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

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

Запуск внешней программы из сервиса [D7, WinXP]


slap ©   (2004-05-18 08:53:00) 

Как запустить внешнюю программу из сервиса!?


slap   (2004-05-18 10:27:00) [1]

kav ,работает!!!! но все таки сделаю запуск через виндовый шедулер,так безопасней будет!


Игорь Шевченко   (2004-05-18 10:16:00) [2]

Программу из сервиса надо запускать на desktop пользователя, или разрешить сервису взаимодействие с Desktop'ом пользователя.

А вообще, ерунда это - программы из сервиса запускать, потенциально вредоносное занятие.


kav   (2004-05-18 10:07:00) [3]

Вот процедура которая работает в моём сервисе.
В качестве параметра указываешь путь.
Как работает сам незнаю. тоже откудато скопировал.

procedure RunProg(CmdLine:String);
const BUFSIZE = 2000;
var SecAttr    : TSecurityAttributes;
   hReadPipe,
   hWritePipe : THandle;
   StartupInfo: TStartUpInfo;
   ProcessInfo: TProcessInformation;
   Buffer     : Pchar;
begin
with SecAttr do
begin
  nlength              := SizeOf(TSecurityAttributes);
  binherithandle       := true;
  lpsecuritydescriptor := nil;
end;
if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then
begin
  Buffer  := AllocMem(BUFSIZE + 1);    // Allochiamo un buffer di dimensioni BUFSIZE+1
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.hStdOutput  := hWritePipe;
  StartupInfo.hStdInput   := hReadPipe;
  StartupInfo.dwFlags     := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_HIDE;

  CreateProcess(nil,PChar(CmdLine),@SecAttr,@SecAttr,true,NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo);

  WaitForSingleObject(ProcessInfo.hProcess, INFINITE );
  FreeMem(Buffer);
  CloseHandle(ProcessInfo.hProcess);
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(hReadPipe);
  CloseHandle(hWritePipe);
end;
end;


slap   (2004-05-18 09:21:00) [4]

то же самое!


Viman   (2004-05-18 09:17:00) [5]

Попробуй укажи флаг SW_SHOWNORMAL вместо SW_SHOW.


slap   (2004-05-18 09:13:00) [6]

к примеру если WinExec('Notepad c:\rc.txt', SW_SHOW), то в процессах появляется notepad, но я его визуально не наблюдаю!


slap   (2004-05-18 09:11:00) [7]

я пробую WinExec, ShellExecute ! но поятно , что они не будут работать, так как у сервиса нету хэндлера!


Viman   (2004-05-18 09:10:00) [8]

Как обычно запускаешь


Наверх

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