Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Результат работы консольного приложения   Найти похожие ветки 

 
Новичоккк   (2006-02-12 13:02) [0]

Я вызываю программы таким образом:
WinExec(PChar("taskkill -f -im calc.exe >C:\res.txt"),SW_HIDE);
Почему-то поток не перенаправляется :(
Возможно ли без лишних заморочек получить результат работы программы, выводимый ею при запуске из cmd?


 
Anatoly Podgoretsky ©   (2006-02-12 13:15) [1]

Чтобы перенапралялось требуется перенаправлятель в лице коммандного процессора.


 
Новичоккк   (2006-02-12 13:20) [2]

Хм. Почему-то раньше все работал именно так.
А дело в TaskKill, т.к. даже при перенаправлении в command.com - результат всё равно выводится в консоль и в файл поток не перенаправляется.
Возможно ли как-нибудь получить результат в данном случае? Или хотя бы узнать как сработала функция без получения текста... Вожет она какой-нибудь результат возвращает?


 
Anatoly Podgoretsky ©   (2006-02-12 15:13) [3]

Существует три стандартных канала ввода/вывода
1. STD_INPUT
2. STD_OUTPUT
3. STD_ERROR

В какой у тебя направляется, указаное перенаправление относится к STD_OUTPUT


 
Новичоккк   (2006-02-12 15:39) [4]

Не знаю... Стандартное приложение WinXP - TaskKill.
Запускаю command.com. Пишу "TaskKill > C:\1.txt", но вывод всё равно идет в консоль и файл не создаётся. А я хотел чтобы моя программа вызывала программу с перенаправлением потока, а потом уже читать результат из файла. Теперь вот не знаю как из программы получить результат работы taskkill.exe.


 
Desdechado ©   (2006-02-12 15:47) [5]

1. что-то такого "стандартного в ХР" я не нашел
2. может, эта программа только на консоль умеет выводить, а не в стандартные потоки? может, у нее хоть коды возврата есть? найди на нее мануал и читай


 
Новичоккк   (2006-02-12 15:50) [6]

Поищу. А всё же это стандартная утилита.
Пуск -> Выполнить -> taskkill


 
Новичоккк   (2006-02-12 16:30) [7]

Вот нашел код:

function RunDos(CmdLine: string):string;
const
 ReadBuffer = 2400;
var
 Security: TSecurityAttributes;
 ReadPipe, WritePipe: THandle;
 start: TStartUpInfo;
 ProcessInfo: TProcessInformation;
 Buffer: Pchar;
 BytesRead: DWord;
 Apprunning: DWord;
begin
 Result:="";
 with Security do
 begin
   nlength := SizeOf(TSecurityAttributes);
   binherithandle := true;
   lpsecuritydescriptor := nil;
 end;
 if Createpipe(ReadPipe, WritePipe, @Security, 0) then
 begin
   Buffer := AllocMem(ReadBuffer + 1);
   FillChar(Start, Sizeof(Start), #0);
   start.cb := SizeOf(start);
   start.hStdOutput := WritePipe;
   start.hStdInput := ReadPipe;
   start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
   start.wShowWindow := SW_HIDE;
   if CreateProcess(nil, PChar(CmdLine), @Security, @Security, true,
     NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then
   begin
     repeat
       Apprunning := WaitForSingleObject(ProcessInfo.hProcess, 100);
       ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);
       Buffer[BytesRead] := #0;
       OemToAnsi(Buffer, Buffer);
       result:=result + string(Buffer);
       Application.ProcessMessages;
     until (Apprunning <> WAIT_TIMEOUT);
   end;
   FreeMem(Buffer);
   CloseHandle(ProcessInfo.hProcess);
   CloseHandle(ProcessInfo.hThread);
   CloseHandle(ReadPipe);
   CloseHandle(WritePipe);
 end;
 ShowMessage(result);
end;


Если как в примере выполнить
RunDos("ping 127.0.0.1");
то всё работает нормально.

Если же выполнить
taskkill -f -im guard.exe
то программа зависает на строке
ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);


 
Desdechado ©   (2006-02-12 16:39) [8]

ping выводит в стандартный поток вывода
а про свой taskkill узнал, куда он шпарит данные?


 
Anatoly Podgoretsky ©   (2006-02-12 17:23) [9]

Desdechado ©   (12.02.06 15:47) [5]
В XP есть, куда выводит не знаю, это задача для автора.


 
Desdechado ©   (2006-02-12 17:43) [10]

2 AP
в моей XP Home SP2 нет никаких taskkill.exe
где вы такое нашли?



Страницы: 1 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
2-1139747390
Kot_
2006-02-12 15:29
2006.02.26
Работа с датой


2-1139148471
Вячеслав Бессонов
2006-02-05 17:07
2006.02.26
TMemo


9-1124602201
fastG
2005-08-21 09:30
2006.02.26
Share ware игры


4-1134030477
SergeyRocker
2005-12-08 11:27
2006.02.26
Изменение настроек драйверов принтера


1-1138192840
alles
2006-01-25 15:40
2006.02.26
Вызов функций из DLL (с++)