如何以编程方式在Mac OS X上设置应用程序包以在用户登录时运行?
基本上,相当于HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Windows 中的注册表项.
Bar*_*ark 18
您可以将应用程序添加到用户的"登录项"(在"系统首选项"=>"帐户"= [用户]下),也可以将启动代理添加到用户的~/Library/LaunchAgents
文件夹中(请参阅参考资料man launchd.plist
).使用~/Library/LaunchDaemons/
,如果你的应用程序有没有面向用户的UI.正如其他人所指出的,launchd让你可以控制应用程序何时启动,如果应用程序退出或崩溃会发生什么等等,并且最适合"守护进程"风格的应用程序(我们没有用户界面).
第一个选项(登录项)可以通过编程方式进行操作(来自Gordon的链接).
"正确"的方法是为要在登录时启动的进程创建一个LaunchAgent,该进程可能具有UI,而LaunchDaemon用于那些应该是纯后台进程的进程.在安装程序中,将plist放入正确的文件夹中,无论是为用户,还是为所有用户或系统.这种方法优越的原因是因为您可以使用launchd来控制进程的运行方式,包括内置的能力,以确保它即使崩溃或被用户杀死也能继续运行.
下面是一个工作示例.
创建一个文件
〜/资源库/ 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)
也可以看看
这是使用"登录项"将应用程序添加到starup的另一种方法.请参阅此示例项目以了解如何实现它:
https://github.com/justin/Shared-File-List-Example