使用 qt 作为新进程执行批处理文件
execute batch-file with qt as a new process
我正在尝试执行一个批处理文件。
此代码应在分离进程中启动 cmd.exe
并执行 deleteme.bat
。 exec->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"
我正在尝试执行一个批处理文件。
此代码应在分离进程中启动 cmd.exe
并执行 deleteme.bat
。 exec->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"