使用qt作为新进程执行批处理文件

时间:2018-08-08 07:04:29

标签: c++ qt c++11 batch-file qprocess

我正在尝试执行批处理文件。

此代码应在独立的进程中以cmd.exe开头并执行deleteme.batexec->startDetached的返回值为true,但未执行批处理文件。

我做错什么了吗?

这是我的代码:

QStringList arguments;
arguments << "/C deleteme.bat";
QProcess * exec = new QProcess();
exec->startDetached("cmd.exe", arguments);

3 个答案:

答案 0 :(得分:2)

这是一个QProcess的有效示例(测试.bat文件的路径为E:\deleteme.bat):

QProcess process;
process.setProgram( "cmd.exe" );
process.setArguments( { "/C", R"(E:\deleteme.bat)" } );
process.setWorkingDirectory( R"(E:\)" );
process.setStandardOutputFile( QProcess::nullDevice() );
process.setStandardErrorFile( QProcess::nullDevice() );
process.startDetached();

以下是deleteme.bat文件,该文件会自行删除:

DEL "%~f0"

答案 1 :(得分:0)

问题似乎出在startDetached()(我仍然找不到原因),但是如果您use execute()可以正常工作

QProcess process;
process.execute("cmd.exe", {"/C deleteme.bat"});

答案 2 :(得分:0)

我自己找到了解决方法。

STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;

wchar_t cmdline[] = L"cmd.exe /C <batch-file>";

if (!CreateProcess(NULL, cmdline, NULL, NULL, false, CREATE_UNICODE_ENVIRONMENT,
    NULL, NULL, &si, &pi))

这也会创建一个独立的进程。