【问题标题】:Start cmd openvpn-gui with arguments in QT使用 QT 中的参数启动 cmd openvpn-gui
【发布时间】:2016-11-23 16:11:17
【问题描述】:

我有一个 QT 桌面应用程序,现在我希望它在启动时也自动调用 openvpn 来启动。

第一次尝试我用一个简单的 system() 调用实现了它,它可以工作,但它会在屏幕上留下 cmd 窗口。我不喜欢它,但它有效:

system("openvpn-gui --connect m2smart.ovpn")

但现在我想直接启动而不需要 cmd 窗口,如果我不带参数执行它,它可以工作,这个:

QProcess openvpn;
QString cmd("openvpn-gui.exe");
openvpn.startDetached(cmd);

现在,我唯一需要的是指出要连接的 config.ovpn,就像在第一个示例中一样,我已经搜索了如何做到这一点,它似乎是这样的:

QProcess openvpn;
QString cmd("openvpn-gui.exe");
QStringList args;

args << "--connect m2smart.ovpn";
openvpn.startDetached(cmd, args);

但它显示了一个 openvpn 窗口,上面写着:

“选项错误:无法识别的选项或缺少参数:--connect m2smart.ovpn”

但是,如果我打开一个 cmd 并输入“openvpn-gui --connect m2smart.ovpn”,它就可以工作,独立于我的工作目录。

所以...有人可以帮助我吗?我被这个困住了。

谢谢!

【问题讨论】:

  • 你试过了吗:QProcess::startDetached("openvpn-gui --connect m2smart.ovpn")
  • @Mike 的工作就像一个魅力......谢谢队友,这么简单的答案,之前没有尝试过。但是我仍然在想为什么我一直在测试的东西不起作用......有什么想法吗?

标签: windows qt cmd qprocess


【解决方案1】:

首先,QProcess::startDetached() 是一个静态方法。调用之前无需实例化QProcess 对象。你只需要这样做:

QProcess::startDetached("openvpn-gui.exe");

现在,QProcess::startDetached() 有两个重载:

  1. QProcess::startDetached(const QString&amp; command):

    从启动程序的角度来看,这与使用system 函数没有区别。所以,在 Windows 上,如果你有类似的东西:

    QProcess::startDetached("openvpn-gui.exe --connect m2smart.ovpn");
    

    这与打开 cmd.exe 并输入 openvpn-gui.exe --connect m2smart.ovpn 相同。

  2. QProcess::startDetached(const QString &amp;program, const QStringList &amp;arguments, const QString &amp;workingDirectory = QString(), qint64 *pid = Q_NULLPTR):

    来自docs

    在 Windows 上,参数被引用并加入到与CommandLineToArgvW() Windows 函数兼容的命令行中。

    所以,如果你在你的程序中使用了这样的东西:

    QString cmd("openvpn-gui.exe");
    QStringList args;
    args << "--connect m2smart.ovpn";
    QProcess::startDetached(cmd, args);
    

    这就像打开 cmd.exe 并输入 openvpn-gui.exe "--connect m2smart.ovpn"


在第一种情况下,传递给openvpn-gui.exe 的第一个参数是--connect,第二个参数是m2smart.ovpn

在第二种情况下,只有一个参数是--connect m2smart.ovpn

【讨论】:

  • 完美,这就是我需要的答案。谢谢你的伙伴!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多