我正在尝试执行批处理文件。
此代码应在独立的进程中以cmd.exe
开头并执行deleteme.bat
。 exec->startDetached
的返回值为true,但未执行批处理文件。
我做错什么了吗?
这是我的代码:
QStringList arguments;
arguments << "/C deleteme.bat";
QProcess * exec = new QProcess();
exec->startDetached("cmd.exe", arguments);
答案 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))
这也会创建一个独立的进程。