我们有一个桌面 JavaFX 应用程序(嗯,TornadoFX),它下载一个存档,从中提取另一个应用程序并使用 macOSopen
命令启动这个应用程序。简化的 kotlin 代码如下所示:
ProcessBuilder(listOf("open", "/path/to/app.app", "arg")).start()
这已经在旧版本的 macOS(10.15 和更早版本)上运行了多年,但现在随着 macOS 11 Big Sur 启动应用程序有时会成功,有时会失败。
在 mac Console.app 中可以看到以下错误:
OSStatus _LSCopyApplicationNodeFromOpenState(LSOpenState *):返回 kLSNoExecutableErr 因为节点是一个目录,但我们未能注册并出现错误 -10814
我们扩展了逻辑以在启动应用程序之前检查所有文件是否确实存在,并且文件存在。
假设 Launch Services 数据库更新速度不够快。
以下尝试记录可能发生的事情的方法没有发现任何错误:
lsappinfo 永远听 +all
日志流 --debug --predicate 'subsystem == "com.apple.coreservices.launchservices"'
是否有人知道是否有办法避免这种行为并始终能够启动应用程序?