使用'cmd'命令的QProcess不会导致命令行窗口

时间:2017-02-05 11:16:17

标签: qt visual-c++ cmd qprocess

我正在将代码从MinGW移植到MSVC2013 / MSVC2015并发现问题。

Key (owner_id)=(0) already exists.

当我使用MinGW时,此代码会生成命令行窗口。但是当我使用MSVC2013或MSVC2015时,相同的代码会导致cmd-process在没有任何窗口的情况下在后台运行。有没有办法让命令行窗口出现?

1 个答案:

答案 0 :(得分:2)

问题与msvc2015有关,而与Qt5.8.0无关。有办法逃脱它。我们的想法是使用CREATE_NEW_CONSOLE标志。

#include <QProcess>
#include <QString>
#include <QStringList>
#include "Windows.h"

class QDetachableProcess 
        : public QProcess {
public:
    QDetachableProcess(QObject *parent = 0) 
        : QProcess(parent) {
    }
    void detach() {
       waitForStarted();
       setProcessState(QProcess::NotRunning);
    }
};

int main(int argc, char *argv[]) {
    QDetachableProcess process;
    QString program = "cmd.exe";
    QStringList arguments = QStringList() << "/K" << "python.exe";
    process.setCreateProcessArgumentsModifier(
                [](QProcess::CreateProcessArguments *args) {
        args->flags |= CREATE_NEW_CONSOLE;
        args->startupInfo->dwFlags &=~ STARTF_USESTDHANDLES;
    });
    process.start(program, arguments);
    process.detach();
    return 0;
}