Вызов fpc.exe из Deplhi

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Elf
незнакомец
Сообщения: 2
Зарегистрирован: 02.05.2009 19:26:43

Вызов fpc.exe из Deplhi

Сообщение Elf »

Никак не могу сделать вызов по типу 'path1\fpc.exe "path2\file.pas" > "path3\log.txt"' на Delphi.

Пробую через CreateProcess:
CreateProcess(nil,
PChar(cmd),
@SeAttr,@SeAttr,false,NORMAL_PRIORITY_CLASS,
nil,
PChar(curdir),
StInfo, ProcInfo);
Где cmd - и есть строка вида 'path1\fpc.exe "path2\file.pas" > "path3\log.txt"', пути могут содержать русские буквы, быть на разных дисках. curdir = path1

В чем косяк: при таком вызове он почему-то пытается скомпилить log.txt. Если запускать 'path1\fpc.exe "path2\file.pas"' - то все нормально, но логично что вывод он ведет на консоль.

Подскажите, что за баг такой, и как его исправить?
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Перенаправление ввода-вывода ( > ) делает командная оболочка.
Читайте внимательнее описание CreateProcess, там написано как перенаправить вывод.

В общих чертах:
1. нужно открыть файл FileHandle := CreateFile(...)
2. указать FileHandle как стандартный вывод при вызове CreateProcess
см. структура STARTUPINFO, в частности её поле hStdOutput
Elf
незнакомец
Сообщения: 2
Зарегистрирован: 02.05.2009 19:26:43

Сообщение Elf »

Спасибо, во всем разобрался!
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Elf
Может быть стоит поступить проще и применить ShellExecute()?

Код: Выделить всё

ShellExecute(0, 'open', 'cmd.exe', 'path1\fpc.exe "path2\file.pas" > "path3\log.txt"', NIL, SW_HIDE);
Ответить