【问题标题】:QProcess issue in executing a exe with arguments执行带有参数的 exe 时出现 QProcess 问题
【发布时间】:2014-04-23 11:51:18
【问题描述】:

我在设置 QProcess 以使用参数运行可执行文件时遇到问题。相同的Qt代码如下,

QString program = "C:\Setup.exe";
QStringList arguments;
arguments << "-uninstall";
QProcess::startDetached(program, arguments);

这个sn -p的输出是卸载一些程序。但它没有发生。我做错了吗?

但如果我进入 cmd 提示符并执行相同的操作,例如,

c:/> "C:/Setup.exe" -卸载 这完美无缺。

【问题讨论】:

  • “它没有发生” - 这是什么意思?它是否无法启动程序,或者只是无法通过卸载标志?连接到 QProcess 错误信号会收到什么错误?
  • 您是否尝试过使用“C:\\Setup.exe”?还是没有参数的“C:\\Setup.exe -unistall”?
  • 其实路径不同。我用正斜杠替换了“\”。它的工作。
  • 我假设您忘记转义反斜杠,即 c:\\setup.exe 而不是 c:\setup.exe?

标签: c++ qt qstring qprocess qtcore


【解决方案1】:

至少有两个选项可以解决您的问题。

  • 根据文档使用“/”作为目录分隔符:

    如果您总是使用“/”,Qt 将转换您的路径以符合底层操作系统。

  • 将文件路径作为字符串 as per an example from the documentation: 使用时,请转义反斜杠

    env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
    env.insert("PATH", env.value("Path") + ";C:\\Bin");
    

因此,你应该这样写:

QString program = "C:/Setup.exe";
QStringList arguments;
arguments << "-uninstall";
QProcess::startDetached(program, arguments);

或者这个:

QString program = "C:\\Setup.exe";
QStringList arguments;
arguments << "-uninstall";
QProcess::startDetached(program, arguments);

一般来说,当遇到此类问题时,您总是可以使用以下语法打印出错误字符串以获取更多信息:

qDebug() << myProcess.errorString();

当然,这需要一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 2013-12-27
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多