OSX两个停靠图标为相同的应用程序

时间:2015-04-17 09:19:06

标签: objective-c xcode macos exec dock

我有两个版本的同一个应用程序:位于/ Applications(app1)中的版本1和位于/ Application Support(app2)中的版本2。在这种情况下,我希望在启动app1时,重定向到app2,这意味着退出app1,然后启动app2。(我已经使用命令行工具实现了这个,它将等待app1完成,然后启动app2)。 / p>

此应用程序有LSUIElement = 1(主要是状态项),但应用程序可能出现在Dock中:如果从状态项打开一个窗口,我会这样做:

TransformProcessType(&psn, kProcessTransformToForegroundApplication);

当窗口关闭时,我会这样做:

TransformProcessType(&psn, kProcessTransformToUIElementApplication);

问题

我面临的问题是,如果用户为app1选择Keep in dock,并且app1重定向到app2,那么用户最终会在Dock中找到两个应用程序图标。

我正在寻找克服这种行为的方法。

问题:

  1. 是否有人试图用exec *系列做到这一点?从我阅读的文档中看到,使用它应该用app2图像替换app1图像,因此它应该帮助我解决我的问题。我尝试了execl和execle,但我没有设法得到预期的行为。请注意,当使用execle启动时,在XCode中我在dyld_start中得到一些程序集异常,app2从成功开始,但有时我在日志中有一些错误(无法找到出口或操作。不确定这些错误是否相关execl)。

  2. 有没有办法解决这种行为,或者欺骗dock.app认为这些是同一个应用程序?我尝试通过修改" persisten-apps"来尝试使用dock app的默认设置。启动app2之前的数组,但它需要重启dock.app才能使更改生效。

  3. 任何帮助都将受到高度赞赏。

    由于

    修改

    1。我创建了一个LSUIElement = 0的测试应用程序,使用execl一切正常。如果我选择" Keep in dock"在app1中,用execl打开app2之后,我最终只在Dock中有一个图标。

    2. 如果对于同一个应用程序我设置了LSUIElement = 1,并且我显示了停靠图标(使用TransformProcessType),在用execl启动app2之后,我将得到两个停靠图标。 这意味着在app1上我转换为前景并选择保持在Dock中。在我用execl执行app2之后,如果我将进程转换为前台,我最终会在停靠栏中显示两个图标。

    有没有人有这种行为的解决方案? 有没有人使用TransformProcessType和execl?

0 个答案:

没有答案