不知何故,如果我调用一个应用程序两次或几次,但应该只运行一个实例(这是需要的),我就会遇到问题。
首先,一些(可能是必要的)背景资料:
因此,我做了一些家庭作业,可以看出以下几点:
open /Applications/App.app/Applications/App.app/content/MacOS/App.app打开应用程序,则关闭旧的应用程序实例,并启动新的App.app-应用程序open-manual并发现,如果我使用-n-flag,应用程序也会成功地启动一个新实例。(open /Applications/App.app -n),我在想为什么?有什么线索吗?应用程序的开放调用和直接调用之间有什么区别?
我建议App.app包中的info.pklist使公开呼叫不同于直接调用App.app。
顺便说一句:不幸的是,我已经尝试添加了尝试捕获块来调试问题,但是open没有给终端提供输出,它只是打开了调用,而直接调用没有抛出错误,而且一切正常。不管怎样,我认为与其说是App.app问题,不如说是MAC OS X问题。
希望有人有同样的问题和我的解决方案
如果需要的话,不要犹豫要求更多的细节。
发布于 2017-05-05 11:34:01
简写版:
open使用LaunchService启动应用程序(可能在info.plist中添加启动参数)*长版本*
我阅读了打开手册(man open;Source:https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/open.1.html),并指出,如果单击某个项目,“通过LaunchServices确定的默认应用程序将用于打开指定的文件”。
因此,我阅读了LaunchService-文档,并发现如下:
“通过文件系统引用打开项目.默认方式:如果指定项是应用程序:.如果应用程序已在运行,则激活它(将其带到屏幕前面)并发送一个'rapp‘(”重新打开应用程序“) Apple事件。”
(资料来源:ref/doc/uid/TP30000999-CH203-TP9)
这正好反映了我的观察,如果我第二次点击图标,应用程序只是聚焦/激活。
因此,我需要告诉应用程序打开一个新实例(oapp-event),而不是激活已经打开的应用程序(rapp-event)。
通过进一步阅读,我得到以下信息:
“在打开应用程序时(单独或打开一个或多个文档或URL),您可以指定各种启动选项,以控制其启动或激活的方式。这些选项可以包括:是否启动应用程序的新实例,即使另一个实例已经在运行”
(资料来源:ref/doc/uid/TP30000999-CH202-BABBJHID)
因此,我只需要添加“启动选项”来定义,即应该创建一个新实例,而不是激活现有实例。但是没有写好它的启动选项是什么,以及它们将如何应用于应用程序(我建议它属于info.plist-文件)。
所以至少这是我最初问题的答案,所以我在这里发了出来。
使用启动服务(以及info.plist中定义的选项-参数)启动应用程序,而应用程序的直接调用只是启动应用程序本身,而没有任何其他启动选项。
https://stackoverflow.com/questions/43634913
复制相似问题