使用 qt 作为新进程执行批处理文件
Posted
技术标签:
【中文标题】使用 qt 作为新进程执行批处理文件【英文标题】:execute batch-file with qt as a new process 【发布时间】:2018-08-08 07:04:28 【问题描述】:我正在尝试执行一个批处理文件。
这段代码应该在一个分离的进程中启动cmd.exe
并执行deleteme.bat
。 exec->startDetached
的返回值为true,但是批处理文件没有被执行。
我做错了吗?
这是我的代码:
QStringList arguments;
arguments << "/C deleteme.bat";
QProcess * exec = new QProcess();
exec->startDetached("cmd.exe", arguments);
【问题讨论】:
你怎么确定它没有运行? 文件应自行删除 (del deleteme.bat)。如果我直接执行它就可以了。但它不适用于这些代码行。 @eyllanesc 你可以显示.bat的内容。此外,如果未通过放置完整路径进行测试,.bat 位于 .exe 的一侧。 bat 文件只包含一行 (del deleteme.bat) 以检查它是否正常工作。它与exe在同一目录中。 试试del /path/of/deleteme.bat
【参考方案1】:
这是一个使用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"
【讨论】:
【参考方案2】:我自己找到了解决办法。
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))
这也会创建一个分离的进程。
【讨论】:
以上是关于使用 qt 作为新进程执行批处理文件的主要内容,如果未能解决你的问题,请参考以下文章