【发布时间】:2023-12-21 12:09:02
【问题描述】:
我正在用 qt 编写一个程序,它将在 windows 中执行命令。
这是我用来尝试让命令工作的方法。
bool FirmwareUpdater::RunCommand( QString& command, QStringList& args, int expectedCode )
{
QProcess *proc = new QProcess();
proc->setWorkingDirectory ( "C:\\windows\\" );
int exitCode = proc->execute(command, args );
proc->waitForFinished();
this->stream << command << " " << exitCode << "\n";
return ( exitCode == expectedCode );
}
如果我跑了
QString command = "ping";
QStringList args;
args << "localhost";
RunCommand( command, args );
它工作正常,它返回 0;
但如果我尝试任何其他 Windows 实用程序,它会返回 -2。现在我正试图让 pnpUtil 也能正常工作。
QString command = qgetenv( "WINDIR" ) + "\\System32\\PnPUtil.exe";
QStringList args;
args << "-a";
args << updateDriver;
我有代码向我打印带有参数的命令,如果我手动运行该命令,它就可以工作。但在 qt 中却没有。
也许我做错了什么。如果没有 QProcess,还有其他方法可以做到这一点吗?
我也尝试过调用静态肉类
QProcess::startDetached
但这对我来说也失败了。
【问题讨论】:
-
我没有使用QT,但是会不会是权限问题?如果你不想使用 QProcess,你总是可以使用 CreateProcess() 和 GetLastError()。
-
我搞砸了这些,但程序甚至没有启动。它只是失败,好像它找不到 exe。但它就在那里。
-
Sysinternals 的进程监控实用程序可能会帮助您找出问题所在 - 它会显示从正在使用的 Windows API 返回的错误代码(我假设是
CreateProcess())。