如何使用QProcess执行cmd命令?

5

我正在尝试使用cmd命令执行操作。

QProcess::startDetached("cmd /c net stop \"MyService\"");

这似乎没有停止服务。但是,如果我从“开始”>>“运行”中运行它,它就能正常工作。


1
尝试使用以下命令:startDetached("cmd", QStringList() << "/c" << "net" << "stop" << "MyService"); 以及带有 << ""MyService"" 的相同命令。为了进行进一步的调试,请不要使用 startDetached,而是启动并连接到 QProcess 实例的 finished() 和 error() 信号。 - Frank Osterfeld
这是我尝试过的代码:QProcess::startDetached("cmd.exe ", QStringList() << " /c " << " net " << " stop " << " \"MyService\"");,但它没有起作用。 - MistyD
@MistyD:按照Frank的建议,尝试去掉所有额外的空格。 - Mike Seymour
我尝试过了,不幸的是它并没有起作用。 - MistyD
1个回答

6

QProcess::startDetached会将第一个参数作为要执行的命令,接下来的参数以空格分隔,将被解释为要传递给该命令的单独参数。

因此,在这种情况下:

QProcess::startDetached("cmd /c net stop \"MyService\"");

该函数将cmd视为命令,并将/c、net、stop和"MyService"作为参数传递给cmd。但是,除了/c之外,其他参数被单独解析并且不是有效的参数。

您需要做的是在"net stop \"MyService\"周围使用引号,以便将其作为单个参数传递,这样就可以得到:-

QProcess::startDetached("cmd /c \"net stop \"MyService\"\"");

或者,使用字符串列表可以使用:

QProcess::startDetached("cmd", QStringList() << "/c" << "net stop \"MyService\"");

第二个示例应该是:QProcess::startDetached("cmd /c \"net stop \\\"MyService\\\"\"");(注意参数字符串内部的额外转义) - Martin Hennings
对我来说没用,也不是必需的。在 mkdir 的例子中,这就足够了: proc.start("cmd /c mkdir \"c:/temp/foo bar9\"")。请参见此问题 - lvr123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接