【问题标题】:Launch an executable from the same dir as a Qt app when white spaces in path当路径中有空格时,从与 Qt 应用程序相同的目录启动可执行文件
【发布时间】:2012-05-14 14:24:26
【问题描述】:

我想在我的 Qt 应用程序中按下按钮时启动一个可执行文件。 此.exe 始终与 Qt 应用程序本身位于同一目录中。

有时此目录的路径中有空格。这似乎阻止了.exe 的启动。

这是我的代码(似乎不起作用):

QString path = QCoreApplication::applicationDirPath ();
path.append("/executable.exe");

QProcess process;
process.execute(path);

我不知道是否可以在不先显示命令提示符的情况下启动.exe。 当.exe 运行时,我必须关闭Qt 应用程序,而.exe 继续运行。

【问题讨论】:

  • 你的意思是 process.execute(path),对吧?
  • 是的,我改了帖子。
  • @OO-SKY:我想知道帖子中与您的代码中还有什么不同...
  • @PlasmaHH :这正是我的代码。但是我认为由于路径中的空白,我对 system(path) 的测试失败了。 process.execute(path) 即使没有空格也无法正常工作。
  • 使用QProcess::startDetached() 生成新进程,在生成应用程序退出时不会关闭

标签: c++ qt executable qprocess


【解决方案1】:

execute(QString) 对可执行路径和参数使用单个字符串。如果没有正确引用,C:\A path with spaces\foo.exe 将被解释为 c:\A 作为可执行文件,pathwith spaces\foo.exe 作为参数。

为避免这种情况,请使用将参数作为单独字符串列表的重载execute(QString, QStringList),即使您根本不想传递参数:

QProcess::execute(path, QStringList());

这样做是正确的,不需要您引用任何内容。

【讨论】:

  • 谢谢,这是空白问题的答案。我现在面临的问题是,除了我的可执行文件(这是一个 NSIS 安装程序)之外,这适用于所有应用程序。这可能是由于必要的管理员权限造成的吗?
猜你喜欢
  • 2014-04-04
  • 1970-01-01
  • 2011-03-31
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多