![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WinExec и Ping
S46E © (2006-07-22 14:01:00)WinExec(Pchar('ping 127.0.0.1 > c:\1.txt'), SW_show);
пишу в cmd 'ping 127.0.0.1 > c:\1.txt' - работает.
пишу в Выполнить - не работает.
пишу в дельфи - тоже.
пишу 'ping 127.0.0.1' - везде работает.
Задача: запустить из дельфи "ping 127.0.0.1 > c:\1.txt" что-бы пинг не ругался 'Неверный параметр'.
Palladin (2006-07-22 14:56:00) [1]символ >это фича коммандного процессора, который, запуская приложение, заменяет stdin на файл указанный после этого символа, ни winexec ни createprocess ни shellexecute естественно этот символ никак не обрабатывают и передают параметром приложению, ping конечно же будет ругаться на этот неизвестный параметр...
потому если хочешь записать вывод результата ping в файл, то придется организовать что то вроде этого...
Var
si:STARTUPINFO;
h:THandle;
pi:PROCESS_INFORMATION;
sa:SECURITY_ATTRIBUTES;
Begin
ZeroMemory(@si,sizeof(si));
With sa Do
Begin
nLength:= SizeOf(sa);
lpSecurityDescriptor:=Nil;
bInheritHandle:=BOOL(True);
End;
h:=CreateFile('c:\1.txt',GENERIC_WRITE,0,@sa,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,0);
With si do
Begin
cb:=SizeOf(si);
hStdOutput:=h;
hStdInput:=STD_INPUT_HANDLE;
hStdError:=STD_ERROR_HANDLE;
dwFlags:=STARTF_USESTDHANDLES;
End;
CreateProcess(nil,'ping 127.0.0.1',nil,nil,true,0,nil,nil,si,pi);
WaitForSingleObject(pi.hProcess,WAIT_OBJECT_0);
FileClose(h);
End;
хотя я так понимаю выполняешь ты это с целью последующего чтения из этого файла :) ну а вышеприведенный пример косвенно показывает, что можно обойтись и без файла... как? пусть это будет домашним заданием...
Anatoly Podgoretsky (2006-07-22 14:20:00) [2]Сам же пишешь, что пишешь в CMD, вот и в Дельфи также делай или перенаправляй потоки вывода. Символ переназначения обрабатывается командным процессором.