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

execute batch-file with qt as a new process

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

此代码应在分离进程中启动 cmd.exe 并执行 deleteme.batexec->startDetached的return值为真,但是批处理文件没有执行。

我是不是做错了什么?

这是我的代码:

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

我自己找到了解决方法。

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))

这也会创建一个分离的进程。

这是一个使用 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"