Как программно установить пакет приложений в Mac OS X для запуска, когда пользователь входит в систему?
В принципе, эквивалент раздела реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Run
в Windows.
Как программно установить пакет приложений в Mac OS X для запуска, когда пользователь входит в систему?
В принципе, эквивалент раздела реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Run
в Windows.
Вы можете добавить приложение к пользователю "Элементы входа" (в разделе "Системные настройки = > Учетные записи = [пользователь]), или вы можете добавить launchd в пользовательскую папку ~/Library/LaunchAgents
(см. man launchd.plist
). Используйте ~/Library/LaunchDaemons/
, если ваше приложение не имеет пользовательского интерфейса пользователя. Как отмечают другие, launchdd дает вам большой контроль при запуске приложения, что происходит, если приложение завершает работу или выходит из строя и т.д., И наиболее подходит для приложений типа" демон" (без нашего интерфейса).
Первым вариантом (Элементы входа) можно управлять программно (ссылка Gordon).
"Правильный" метод заключается в создании LaunchAgent для процессов, которые вы хотите запустить при входе в систему, которые могут иметь пользовательский интерфейс и LaunchDaemon для тех, которые должны быть чистыми фоновыми процессами. В установщике снимите свой слой в нужную папку, как для пользователя, так и для всех пользователей или для системы. Причина, по которой этот метод превосходит, заключается в том, что вы можете использовать launchd для управления запуском вашего процесса, включая встроенную возможность убедиться, что он продолжает работать, даже если он сбой или был убит пользователем.
Ниже приведен рабочий пример.
Создать файл
~/Library/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
См. также
Другим способом добавления приложения в стартап можно воспользоваться "Элементы входа". См. Этот примерный проект о том, как его реализовать:
Требуется бросить это здесь для всех, кто использует Qt/С++. Qt делает его очень простым в использовании plists через класс QSettings. Проверьте этот фрагмент кода из образца фиктивного приложения.
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");
}