Как можно запустить консольную программу в Windows 10 с помощью приложения, разработанного на Qt?

Я новичок и работаю с учебной программой на Qt 5.15. Мне нужно запустить консольные приложения в отдельном окне по нажатию кнопки на форме, хотя бы без параметров для начала. Я не смог найти стабильный код для реализации этой задачи и пробовал несколько методов из поиска, но без успеха. Вот последний фрагмент кода, который иногда срабатывает: <br/> <br/> mainwindow.cpp: <br/> <br/> <pre><code class="cpp">void MainWindow::on_pushButton_clicked()
{
    QProcess process;
    process.setProgram("c:\\Windows\\System32\\diskpart.exe");
    qint64 pid;
    process.startDetached(&amp;pid);
}</code></pre> <br/> <br/> Diskpart - это единственное консольное приложение, которое я смог запустить таким образом. Однако, cmd и другие приложения не работают, а explorer.exe запускается только из каталога Windows или Windows\SysWOW64, но не из System32.
  • 9 января 2025 г. 12:04
Ответы на вопрос 2
Чтобы запустить консольное приложение в Windows 10 с помощью Qt, вы можете использовать класс `QProcess`. Вы правильно начали с его использования. Вот пример кода, который должен помочь вам запустить любое консольное приложение, включая `cmd.exe` или любое другое приложение.

Вот пример, который вы можете использовать в вашем методе `on_pushButton_clicked()`:

```cpp
#include <QProcess>
#include <QMessageBox>

void MainWindow::on_pushButton_clicked()
{
    QProcess *process = new QProcess(this);

    // Установите имя программы (в данном случае cmd.exe)
    process->start("cmd.exe");

    // Дополнительно можно проверить, запустился ли процесс
    if (!process->waitForStarted()) {
        QMessageBox::warning(this, tr("Ошибка"), tr("Не удалось запустить консольное приложение."));
        return;
    }

    // Здесь можно вызвать другие методы QProcess, если это необходимо
    // Например:
    // process->write("echo Hello World\n");
    // process->closeWriteChannel();
}
```

Обратите внимание на следующие моменты:

1. **Путь к программе**: В данном случае `cmd.exe` доступна в `PATH`, поэтому нет необходимости указывать полный путь. Для других программ вам нужно будет указать правильный путь.

2. **Проверка запуска**: Мы используем метод `waitForStarted()`, чтобы проверить, правильно ли запустился процесс.

3. **Удаление процесса**: Важно управлять памятью. Если вы используете `new`, не забудьте освободить объект `QProcess`, когда он больше не нужен, чтобы избежать утечек памяти. В данном случае вы можете использовать `QPointer` или просто удалить указатель, когда он завершит свою работу.

Если вы хотите запустить терминал с определёнными параметрами (например, выполнение команды), можете использовать `process->write(...)` для передачи команд в процессе, как показано в комментариях в примере кода.

Этот код должен работать для большинства консольных приложений, но обязательно убедитесь, что у вас есть необходимые разрешения для запуска этих приложений, особенно тех, которые требуют административных прав.
А ежели так попробовать? 
QProcess process;
QString program = "C:/Windows/explorer.exe";
QStringList arguments;

process.startDetached(program, arguments);
Похожие вопросы