Программно запускаться при запуске на Mac OS X? - PullRequest
17 голосов
/ 29 июля 2010

Как программно настроить пакет приложений в Mac OS X для запуска при входе пользователя в систему?

По сути, эквивалент ключа реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Run в Windows.

Ответы [ 4 ]

17 голосов
/ 29 июля 2010

Вы можете добавить приложение в «Элементы входа» пользователя (в Системных настройках => Учетные записи = [пользователь]) или добавить агента launchd в папку пользователя ~/Library/LaunchAgents (см. man launchd.plist). Используйте ~/Library/LaunchDaemons/, если ваше приложение не имеет пользовательского интерфейса. Как отмечают другие, launchd дает вам большой контроль над тем, когда приложение запускается, что происходит, если приложение закрывается или падает, и т. Д., И наиболее подходит для приложений в стиле «демон» (с нашим без пользовательского интерфейса).

Первой опцией (элементы входа в систему) можно манипулировать программно (ссылка Гордон ).

6 голосов
/ 29 июля 2010

«Правильный» метод - создать LaunchAgent для процессов, которые вы хотите запустить при входе в систему, которые могут иметь пользовательский интерфейс и LaunchDaemon для тех, которые должны быть чисто фоновыми процессами. В вашем установщике поместите ваш plist в правильную папку, либо для пользователя, либо для всех пользователей, либо для системы. Причина, по которой этот метод является лучшим, заключается в том, что вы можете использовать launchd для управления процессом запуска, включая встроенную возможность убедиться, что он продолжает работать даже в случае сбоя или уничтожения пользователем.

5 голосов
/ 10 февраля 2014

Рабочий пример ниже.

Создать файл

~ / 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

Смотри также

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

Другой способ добавить приложение в стартап, используя «Элементы входа». Посмотрите этот пример проекта о том, как его реализовать:

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

3 голосов
/ 28 октября 2010

Хотел выкинуть это сюда для всех, кто использует Qt / C ++.Qt упрощает использование списков через класс 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");
}
...