gpt4 book ai didi

c++ - QProcess 在运行有效命令时总是返回 -2

转载 作者:太空狗 更新时间:2023-10-29 20:59:08 25 4
gpt4 key购买 nike

我正在用 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,还有其他方法可以做到这一点吗?

我也试过调用静态meathod

QProcess::startDetached

但这对我来说也是失败的。

最佳答案

我相信您的程序是 32 位的,并且在 64 位 Windows 下运行。当您运行 32 位程序时,PnPUtil.exe 不在 c:\windows\system32 中,这就是 QProcess 无法启动它的原因.它在其他地方,例如,我的位于 C:\Windows\WinSxS\amd64_microsoft-windows-pnputil_31bf3856ad364e35_6.3.9600.16384_none_ee22229c907e8ce2。您可以在命令提示符下运行 c:\windows\system32\PnPUtil.exe,因为 cmd.exe 是一个 64 位程序。

您可以尝试解决方案 herehere .

更新 1

在 32 位或 64 位 Windows 下运行 PnPUtil 和 Ping 的示例代码。

#include <QtCore>

void run( QString command, QStringList args )
{
QProcess *proc = new QProcess();
//proc->setWorkingDirectory ( "C:\\windows\\" );
qDebug() << "\n===========================================";
qDebug() << "Running " << command << args.join(' ');
qDebug() << (QFile::exists(command) ? "File exists: " : "File may not exist:") << command;
int exitCode = proc->execute(command, args );
proc->waitForFinished();
qDebug() << "\nResult";
qDebug() << "======";
qDebug() << "proc->execute() =" << exitCode;
qDebug() << "proc->exitCode() =" << proc->exitCode();
qDebug() << "proc->exitStatus() =" << proc->exitStatus();
}

int main(int argc, char *argv[])
{
QStringList pnpUtilArg("-?");
QStringList pingArg("google.com");

run( qgetenv( "WINDIR" ) + "\\sysnative\\pnputil.exe", pnpUtilArg);
run( qgetenv( "WINDIR" ) + "\\system32\\pnputil.exe", pnpUtilArg);
run( qgetenv( "WINDIR" ) + "\\system32\\ping.exe", pingArg);
run( "ping.exe", pingArg);

getchar();
}

关于c++ - QProcess 在运行有效命令时总是返回 -2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com