![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск внешней программы из сервиса [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]Как обычно запускаешь