Запуск .exe из C++

151
28 января 2018, 03:03

Как запустить .ехе файл из C++? Знаю о существовании StartProcess, но не могу понять как добавить параметры командной строки.

Например, мне нужно запустить tesseract.exe с параметрами:

img1.jpg out -l rus --oem 2
Answer 1

Простое решение - использовать функцию system, в вашем случае:

system("tesseract.exe img1.jpg out -l rus --oem 2");

Кроссплатформенное решение - Boost.Process

Позволяет:

  • создавать дочерние процессы
  • настраивать потоки ввода/вывода для дочерних процессов
  • взаимодействовать с дочерними процессами с помощью потоков ввода/вывода (синхронно и асинхронно)
  • ожидать завершения процесса (синхронно и асинхронно)
  • прерывать процесс

Пример:

#include <boost/process.hpp>
using namespace boost::process;
int main()
{
    ipstream pipe_stream;
    child c("gcc --version", std_out > pipe_stream);
    std::string line;
    while (pipe_stream && std::getline(pipe_stream, line) && !line.empty())
        std::cerr << line << std::endl;
    c.wait();
}
Answer 2

Не хотите воспользоваться _spawnl?

В вашем случае -

#include <process.h>
....
intptr_t rc = _spawnl(P_WAIT,"tesseract.exe","tesseract.exe",
                      "img1.jpg","out","-l","rus","--oem","2",NULL);

В отличие от system вернет информацию о выполнении.

Answer 3

Как вариант можно указать "\"tesseract\" img1.jpg out -l rus --oem 2" в качестве запускаемого приложения. Такой вариант тоже может сработать, хотя у CreateProcess'a есть нужные аргументы для передачи параметров запуска.

Answer 4

Я делаю так:

system("start tesseract.exe img1.jpg out -l rus --oem 2");

Но контроля над созданным процессом нет.