CreateProcess可以启动一个进程,但QProcess不能.为什么
CreateProcess can start a process, but QProcess cannot... why?
我正在编写一个需要启动其他应用程序的Windows QT应用程序。如果我使用以下窗口调用,一切正常:
QString qsExePath = "C:\Program Files (x86)\Some Company\SomeApp.exe";
QString qsCommandLine = "";
DWORD dwLastError = 0;
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = (WORD)1;
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo, sizeof(processInfo));
if (CreateProcess((TCHAR*)(qsExePath.utf16()), (TCHAR*)(qsCommandLine.utf16()),
NULL, NULL, FALSE, 0, NULL, NULL,
&startupInfo, &processInfo))
{
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
else
{
dwLastError = GetLastError();
}
但是,如果我使用以下 QT 调用,它不起作用并失败并显示 QProcess::未知错误。
QProcess process;
bool bStarted = process.startDetached(qsExePath);
qDebug() << process.error();
如果将 SomeApp.exe 复制到我的 %TMP% 目录并相应地更改 qsExePath,我可以让 QProcess 工作,所以这显然是某种权限错误。我不明白为什么...如果真的是权限,我的创建进程窗口调用不应该失败吗?
您的路径中有空格。 您正在调用采用单个参数的重载版本的 QProcess.startDetached()
,因此它会将其解释为要执行的完整命令行。 因此,尝试将路径括在引号中,否则它会认为"C:\Program"是要执行的程序,其他一切都是参数,这是错误的:
QString qsExePath = ""C:\Program Files (x86)\Some Company\SomeApp.exe"";
bool bStarted = process.startDetached(qsExePath);
或者,调用 startDetached()
的其他重载版本之一,让它在内部为您计算出必要的报价:
QString qsExePath = "C:\Program Files (x86)\Some Company\SomeApp.exe";
bool bStarted = process.startDetached(qsExePath, QStringList());
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- 使用QProcess执行命令,并将结果存储在QStringList中
- 终止 QProcess 不会终止子进程
- 当进程结束时,如何保持由 QProcess 执行的命令?
- 如何在Windows上通过QProcess启动提升的子进程?
- 如果儿童进程崩溃,则QPROCESS ::已完成
- QProcess::terminate() 不适用于简单的 Qt 应用程序作为 Windows XP 下的子进程
- Qt避免警告QProcess:在进程仍在运行时被销毁(助手)
- 如何在新线程(QThread)中使用进程(QProcess)
- 在窗口错误中使用QProcess启动进程:"Timers can only be used with threads started with QThread"
- 如果在堆上定义,QProcess 不会终止/终止进程
- 如何与子进程QProcess交互
- Qt避免警告"QProcess:在进程仍在运行时被破坏
- Qt QProcess startDetached 无法结束进程(bash 会话)
- 暂停并恢复 Qt 中由 QProcess 启动的子进程
- CreateProcess可以启动一个进程,但QProcess不能.为什么