Никак не могу сделать вызов по типу '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"' - то все нормально, но логично что вывод он ведет на консоль.
Подскажите, что за баг такой, и как его исправить?
Вызов fpc.exe из Deplhi
Модератор: Модераторы
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Перенаправление ввода-вывода ( > ) делает командная оболочка.
Читайте внимательнее описание CreateProcess, там написано как перенаправить вывод.
В общих чертах:
1. нужно открыть файл FileHandle := CreateFile(...)
2. указать FileHandle как стандартный вывод при вызове CreateProcess
см. структура STARTUPINFO, в частности её поле hStdOutput
Читайте внимательнее описание CreateProcess, там написано как перенаправить вывод.
В общих чертах:
1. нужно открыть файл FileHandle := CreateFile(...)
2. указать FileHandle как стандартный вывод при вызове CreateProcess
см. структура STARTUPINFO, в частности её поле hStdOutput
Спасибо, во всем разобрался!
Elf
Может быть стоит поступить проще и применить ShellExecute()?
Может быть стоит поступить проще и применить ShellExecute()?
Код: Выделить всё
ShellExecute(0, 'open', 'cmd.exe', 'path1\fpc.exe "path2\file.pas" > "path3\log.txt"', NIL, SW_HIDE);