Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
Новичоккк   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
15-1138722230
jack128
2006-01-31 18:43
2006.02.26
Сумашедший тест :-)


2-1139745744
ihatelogins
2006-02-12 15:02
2006.02.26
Delphi + unicode


4-1133957255
Shastox
2005-12-07 15:07
2006.02.26
Буфер и StringGrid


2-1139199972
TimScorp
2006-02-06 07:26
2006.02.26
DLL.


2-1139385625
Daria
2006-02-08 11:00
2006.02.26
сквозная нумерация файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский