在 QT 中使用参数启动 cmd openvpn-gui
Start cmd openvpn-gui with arguments in QT
我有一个 QT 桌面应用程序,现在我希望它在启动时自动调用 openvpn 来启动。
首先尝试我通过一个简单的 system() 调用实现了它,它可以工作,但是它在屏幕上留下了 cmd window。我不喜欢它,但它有效:
system("openvpn-gui --connect m2smart.ovpn")
但现在我想直接启动而不需要 cmd window,如果我不带参数就可以运行,这:
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 window 上面写着:
"Options error: unrecognized option or missing parameter(s): --connect m2smart.ovpn"
但是如果我打开一个 cmd 并输入“openvpn-gui --connect m2smart.ovpn 它就可以工作,独立于我的工作目录。
所以...有人可以帮助我吗?我坚持这个。
谢谢!
首先,QProcess::startDetached()
是一个静态方法。在调用它之前不需要实例化一个 QProcess
对象。您只需要做:
QProcess::startDetached("openvpn-gui.exe");
现在,我们有两个 QProcess::startDetached()
的重载:
QProcess::startDetached(const QString& command)
:
从启动程序的角度来看,这与使用 system
函数没有区别。所以,在 windows,如果你有类似的东西:
QProcess::startDetached("openvpn-gui.exe --connect m2smart.ovpn");
这与打开 cmd.exe
并输入 openvpn-gui.exe --connect m2smart.ovpn
相同。
-
来自docs:
On Windows, The arguments are quoted and joined into a command line that is compatible with the CommandLineToArgvW()
Windows function.
所以,如果你在你的程序中使用了这样的东西:
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
.
我有一个 QT 桌面应用程序,现在我希望它在启动时自动调用 openvpn 来启动。
首先尝试我通过一个简单的 system() 调用实现了它,它可以工作,但是它在屏幕上留下了 cmd window。我不喜欢它,但它有效:
system("openvpn-gui --connect m2smart.ovpn")
但现在我想直接启动而不需要 cmd window,如果我不带参数就可以运行,这:
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 window 上面写着:
"Options error: unrecognized option or missing parameter(s): --connect m2smart.ovpn"
但是如果我打开一个 cmd 并输入“openvpn-gui --connect m2smart.ovpn 它就可以工作,独立于我的工作目录。
所以...有人可以帮助我吗?我坚持这个。
谢谢!
首先,QProcess::startDetached()
是一个静态方法。在调用它之前不需要实例化一个 QProcess
对象。您只需要做:
QProcess::startDetached("openvpn-gui.exe");
现在,我们有两个 QProcess::startDetached()
的重载:
QProcess::startDetached(const QString& command)
:从启动程序的角度来看,这与使用
system
函数没有区别。所以,在 windows,如果你有类似的东西:QProcess::startDetached("openvpn-gui.exe --connect m2smart.ovpn");
这与打开
cmd.exe
并输入openvpn-gui.exe --connect m2smart.ovpn
相同。-
来自docs:
On Windows, The arguments are quoted and joined into a command line that is compatible with the
CommandLineToArgvW()
Windows function.所以,如果你在你的程序中使用了这样的东西:
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
.