Работа с CreateProcess(): запуск команд в Windows из Delphi
Вопрос пользователя заключается в том, чтобы выполнить через функцию CreateProcess() следующие действия:
Переход в рабочую копию SVN.
Выполнение команд SVN.
Перенаправление вывода в файл.
В начале пользователь пытался использовать следующий код, но это не приводило к желаемому результату:
procedure TQPortMainForm.CmdMigrationClick(Sender: TObject);
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CreateOk: boolean;
input: String;
begin
// Инициализация StartInfo и ProcInfo
// ...
// Формирование строки с командами
input := 'D: & cd D:\Qport\trunk\Qport\ & ' + SVN_PATH + ' log > C:\users\PhilippKober\UNIQUE_NAME_BLUB.txt';
// Вызов CreateProcess
CreateOk := CreateProcess(nil, PChar(input), nil, nil, false, CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, nil, nil, StartInfo, ProcInfo);
// Ожидание завершения процесса
if CreateOk then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end;
Проблема заключалась в неправильном формировании строки input. В редакте 2 пользователь предоставил исправленный код, где используется cmd.exe для выполнения команд:
Однако, в подтвержденном ответе отмечается, что для корректной работы необходимо изменить параметры вызова CreateProcess. В частности, следует передать путь к исполняемому файлу (в данном случае cmd.exe), использовать параметр lpCurrentDirectory для смены рабочей директории до запуска cmd.exe, и добавить параметр /C для выполнения команды и закрытия cmd.exe после её выполнения.
Исправленный код будет выглядеть следующим образом:
Альтернативный ответ подтверждает необходимость передачи всех параметров в строку lpCommandLine, что является лучшей практикой при использовании CreateProcess() для запуска команд.
Вопрос связан с использованием функции `CreateProcess()` в среде Delphi для запуска команд в командной строке Windows с целью выполнения операций с SVN репозиторием и перенаправления вывода в файл.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.