3

假设我有一个我写的应用程序,它依赖于安装在我机器上的外部应用程序(我们称之为“工具”)上的某些任务。在我的程序中,我用 调用它system( "tool myarguments" );,工作正常。

现在,我想分发我的应用程序。当然,最终用户可能没有在他的机器上安装“工具”,所以我希望我的应用程序检查这一点,并为用户打印一条消息。所以我的问题是:

是否有一种便携式方法来检查机器上是否存在应用程序?(假设我们知道它的名称并且可以通过机器的外壳访问它)。

附加信息:第一个想法是检查二进制文件的存在,但是:

  • 这取决于平台,
  • 取决于它的安装方式(从源代码构建,通过包安装,...),它可能并不总是在同一个地方,尽管它可以通过本地路径访问。

我对这个问题的第一意见是“不”,但也许有人有想法?

参考:系统()

相关:stackoverflow.com/questions/7045879

4

2 回答 2

2

如果您使用 Qt 工具包,QProcess可能会对您有所帮助。

编辑:并寻找QProcess::error()返回值:如果是QProcess::FailedToStart,则要么未安装,要么您的权限不足。

于 2013-10-10T15:18:56.293 回答
1

如果在没有参数的情况下运行该工具没有副作用,并且预计返回的退出代码为 0,您可以使用system("tool")该工具来检查该工具的存在。

system您可以通过检查' 的返回值来检查是否找到了该命令,如下所示:

int ret = system("tool");
if (ret != 0) {
    std::cout << "tool is not here, move along\n";
}

从某种意义上说,它是可移植的,如果一切顺利,系统预计返回 0,并且命令返回状态也为 0。

例如,在 Linux 上,运行system("non_existing_command")返回 0x7F00(与返回的值类型相同wait())。

在 Windows 上,它返回 1。

于 2013-10-10T15:38:13.940 回答