在Mac OS X上以编程方式在启动时运行?

Jak*_*les 18 macos autorun

如何以编程方式在Mac OS X上设置应用程序包以在用户登录时运行?

基本上,相当于HKCU\Software\Microsoft\Windows\CurrentVersion\RunWindows 中的注册表项.

Bar*_*ark 18

您可以将应用程序添加到用户的"登录项"(在"系统首选项"=>"帐户"= [用户]下),也可以将启动代理添加到用户的~/Library/LaunchAgents文件夹中(请参阅参考资料man launchd.plist).使用~/Library/LaunchDaemons/,如果你的应用程序有没有面向用户的UI.正如其他人所指出的,launchd让你可以控制应用程序何时启动,如果应用程序退出或崩溃会发生什么等等,并且最适合"守护进程"风格的应用程序(我们没有用户界面).

第一个选项(登录项)可以通过编程方式进行操作(来自Gordon的链接).

  • Apple的[关于这个主题的开发文档](http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html)描述了添加登录项的3种方法,以及代码片段一个和另一个示例代码的链接. (4认同)
  • @BarryWark 链接现已损坏。 (3认同)

Jer*_*emy 6

"正确"的方法是为要在登录时启动的进程创建一个LaunchAgent,该进程可能具有UI,而LaunchDaemon用于那些应该是纯后台进程的进程.在安装程序中,将plist放入正确的文件夹中,无论是为用户,还是为所有用户或系统.这种方法优越的原因是因为您可以使用launchd来控制进程的运行方式,包括内置的能力,以确保它即使崩溃或被用户杀死也能继续运行.


Dmi*_*riy 5

下面是一个工作示例.

创建一个文件

〜/资源库/ LaunchAgents/my.everydaytasks.plist

内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>my.everydaytasks</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/EverydayTasks.app/Contents/MacOS/EverydayTasks</string>
    </array>
    <key>ProcessType</key>
    <string>Interactive</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

查看帮助我制作此示例的原始帖子:

https://superuser.com/a/229792/43997

要测试你需要在终端中运行它

launchctl load -w ~/Library/LaunchAgents/my.everydaytasks.plist
Run Code Online (Sandbox Code Playgroud)

卸货

launchctl unload -w ~/Library/LaunchAgents/my.everydaytasks.plist
Run Code Online (Sandbox Code Playgroud)

也可以看看

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html

这是使用"登录项"将应用程序添加到starup的另一种方法.请参阅此示例项目以了解如何实现它:

https://github.com/justin/Shared-File-List-Example