如何以编程方式在Mac OS X上设置应用程序包,以便在用户登录时运行?
基本上,相当于Windows中的HKCU\Software\Microsoft\Windows\CurrentVersion\Run
注册表项。
答案 0 :(得分:17)
您可以将应用程序添加到用户的“登录项”(在系统偏好设置=>帐户= [用户]下),也可以将launchd代理添加到用户的~/Library/LaunchAgents
文件夹中(请参阅man launchd.plist
)。如果您的应用没有面向用户的用户界面,请使用~/Library/LaunchDaemons/
。正如其他人所指出的,launchd让你可以控制应用程序何时启动,如果应用程序退出或崩溃会发生什么等等,并且最适合“守护进程”风格的应用程序(我们没有用户界面)。
可以操作第一个选项(登录项)programmatically(来自Gordon的链接)。
答案 1 :(得分:6)
“正确”的方法是为要在登录时启动的进程创建一个LaunchAgent,这些进程可能具有UI和适用于纯后台进程的LaunchDaemon。 在安装程序中,将plist放入正确的文件夹中,无论是为用户,还是为所有用户或系统。这种方法优越的原因是因为你可以使用launchd控制进程的运行方式,包括内置的能力,即使它崩溃或被用户杀死,也能确保它继续运行。
答案 2 :(得分: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>
请参阅帮我制作此示例的原始帖子:
https://superuser.com/a/229792/43997
要测试你需要在终端
中运行它launchctl load -w ~/Library/LaunchAgents/my.everydaytasks.plist
卸载
launchctl unload -w ~/Library/LaunchAgents/my.everydaytasks.plist
另见
这是使用“登录项”将应用程序添加到starup的另一种方法。请参阅此示例项目,了解如何实现它:
答案 3 :(得分:3)
对于使用Qt / C ++的人来说,想把它扔出去。 Qt使得通过QSettings类使用plist非常容易。从示例虚拟应用程序中查看此代码段。
void MainWindow::readPlist()
{
QSettings settings(appPlistPath, QSettings::NativeFormat);
QVariant value = settings.value("mykey");
QMessageBox::information(this, "Your Value", value.toString());
}
void MainWindow::addPlistEntry()
{
QSettings settings(appPlistPath, QSettings::NativeFormat);
settings.setValue("mykey", "myvalue");
}
void MainWindow::removePlistEntry()
{
QSettings settings(appPlistPath, QSettings::NativeFormat);
settings.remove("mykey");
}