检测程序是否安装在机器上

时间:2013-10-10 15:15:00

标签: c++

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

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

是否有可移植的方法来检查机器上是否存在应用程序?(假设我们知道它的名称并且可以通过机器的shell访问)。

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

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

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

参考:system()

相关:stackoverflow.com/questions/7045879

2 个答案:

答案 0 :(得分:2)

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

编辑:并查找QProcess::error()返回值:如果是QProcess::FailedToStart,则表示未安装,或者您没有足够的权限。

答案 1 :(得分: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。