运行Applescript:WorkFlowServiceRunner不会终止

时间:2013-08-27 01:21:09

标签: macos applescript keyboard-shortcuts automator workflowservice

我正在尝试制作键盘快捷键以在OS X Mountain Lion中启动终端。

经过一些研究后我发现我可以使用 Automator 来实现这一目标:

http://mac.tutsplus.com/tutorials/tips-shortcuts/how-to-launch-any-app-with-a-keyboard-shortcut/

它有效,但我注意到每当我使用此方法启动终端时,一个名为 WorkFlowServiceRunner 的进程启动,而永远不会终止。更糟糕的是,当我启动更多终端(或使用快捷方式再次通过Automator启动不同的应用程序)时,多个 WorkFlowServiceRunner进程启动并快速占用内存。

我也尝试过编写自己的应用程序,但问题并没有消失。这显然看起来像是内存泄漏。这是OS X Automator中的错误吗?有没有办法编写一个AppleScript,以便WorkFlowServiceRunner在完成工作后终止(例如启动终端)? Automator似乎是完成此操作的最“原生”方式,我不想使用任何第三方应用程序。

2 个答案:

答案 0 :(得分:4)

我不时注意到这一点。

一种方法是使用Cocoa-AppleScript Applet制作自己的服务应用程序。

这不是很难。我会尽力引导你完成它。它应该只需要几分钟。

第1步。

打开您的Application Applescript Editor。然后转到"文件"菜单 - > "来自模板" - > Cocoa-AppleScript Applet.app

enter image description here

第2步,

将此代码粘贴到新文档中。

property NSWorkspace : class "NSWorkspace"

tell current application's NSApp to setServicesProvider_(me)
NSUpdateDynamicServices()

my runAService()
    on runAService()

            NSWorkspace's sharedWorkspace()'s launchAppWithBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifier_("com.apple.Terminal", current application's NSWorkspaceLaunchDefault, missing value, missing value)

        tell me to quit
    end runAService

第3步,

<强>编译
(点击这个编译)

enter image description here

保存应用。

*确保在保存对话框中取消选中 显示启动屏幕

为应用程序命名为 LaunchTerminal.app

第4步

点击&#34;捆绑内容&#34;文档右上角的按钮。

这将打开应用程序内容视图。

enter image description here

单击“操作”按钮,然后单击“#34;在取景器中显示”#34;子菜单。

enter image description here

步骤 5,

在Finder中打开的内容文件夹中,您将看到一个文件名&#34; info.plist&#34;

打开Terminal.app并使用此文件的路径键入并运行此代码:

但请确保您不包含&#34; .plist&#34;在Terminal.app

中输入名称的一部分
 /usr/bin/defaults write /Users/YourUserNameHere/myServiceApps/LaunchTerminal.app/Contents/Info  NSServices -array-add '{NSMenuItem={default="Launch Terminal";}; NSMessage="runAService"; NSSendTypes=();}'

(您可以将文件拖放到终端以获取posix路径字符串) 路径部分如下所示: /Users/YourUserNameHere/myServiceApps/LaunchTerminal.app/Contents/Info

这段代码应该为plist文件添加一个数组,这是app广播它有服务的方式的一部分。

The plist file Opened in a plist editor app

步骤 6,

再次编译并保存应用程序。

只是为了确保它获取更改。 (我发现我必须这样做,即使我不应该这样做)

步骤 7,

双击应用程序以便第一次运行它。

该应用程序将立即退出。但是第一次运行应该广播它有一个应该在系统中注册的服务

步骤 8,

打开系统偏好设置并转到服务 - &gt;一般(部分)

你会看到&#34;发射终端&#34;服务。

正常设置捷径。

希望这会有所帮助..

更新:

我注意到了应用程序&#34;终端&#34;激活。如果我关闭它们并且之前退出终端,则不会打开我的默认窗口组。如果我这样做的正常行为是我的默认窗口组打开。 (我在启动时打开了两个标签,每个CD都打开了不同的路径)。

所以我已经将打开的应用程序更改为可可方式。

打开/ application / path /的do shell脚本。也会工作。

答案 1 :(得分:0)

尝试使用ButlerQuicKeys。他们都有无尽的“试用期”。