假设我有一个我编写的应用程序,它依赖于我的机器上安装的externat应用程序(我们称之为“工具”)上的某些任务。在我的程序中,我用system( "tool myarguments" );
调用它,工作正常。
现在,我想分发我的应用程序。当然,最终用户可能没有在他的机器上安装“工具”,所以我希望我的应用程序检查这一点,并为用户打印一条消息。所以我的问题是:
是否有可移植的方法来检查机器上是否存在应用程序?(假设我们知道它的名称并且可以通过机器的shell访问)。
附加信息:第一个想法是检查二进制文件是否存在,但是:
我对这个问题的第一个看法是“不”,但也许有人有想法?
参考:system()
答案 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。