Вызвать CMD-команду с помощью Qt

Рейтинг: 0Ответов: 1Опубликовано: 08.03.2023

Пытаюсь выполнить простую CMD-команду с помощью Qt-приложения. Безуспешно. Что я делаю неправильно?

QString program = "C:/Windows/System32/cmd.exe";
QStringList arguments;
arguments << "cd C:/Program Files/MySQL/MySQL Server 8.0/bin" << "mysqldump -uroot -ppasw database clients > E:/clients.sql";

QProcess myProcess;
myProcess.start(program, arguments);
myProcess.waitForFinished (-1);

Ответы

▲ 3Принят

Запустите cmd /? и посмотрите какие параметры могут передаваться при запуске, и обратите внимание на ключи /C и /K.

После этого попробуйте запустить правильную команду из командной строки. На ваше текущее художество cmd ответит непонятно чем, при этом сам cmd.exe останется висеть запущенным процессом.

Варианты решения: Правильная командная строка:

cmd /c "cd C:\Program Files\MySQL\MySQL Server 8.0\bin&&mysqldump -uroot -ppasw database clients > E:/clients.sql"

Если уж приспичило скармливать команды поштучно, то что-то типа такого

QProcess p;
QString cmdlist="cd C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\nmysqldump -uroot -ppasw database clients > E:\\clients.sql\n";
p.start("cmd");
p.write(cmdlist.toUtf8());
p.write("exit\n");
p.waitForFinished(-1);