Добавьте приложение в OSX "элементы входа" во время сценария postflight установщика Package Maker

Мне нужен способ добавить приложение к элементам входа из сценария postflight, который запускается как часть моего установщика. Он должен работать на 10.5+. Предпочтительно, это будет работать в сценарии bash. Мое заявление уже требует административных прав.

подход, который я нашел здесь:элементы входа в Mac OS с аргументами? казалось бы, на правильном пути (см. ниже)... но не работал, когда я пробовал его в командной строке, и я не уверен, как его установить для Все пользователи, или если мне нужно добавить логику, чтобы проверить, если он уже добавлен в элементы автозагрузки перед вызовом этого кода.

#!/bin/bash
/usr/bin/osascript -e "tell application "System Events" to make new login item with properties { path: "", hidden:false } at end"

Я подозреваю, что я также мог бы сделать что-то с launchd. Но я не уверен, какой подход является лучшей практикой для совместимости между версиями.

примечание: Я не хочу добавлять его, используя некоторый код objective-c внутри моего приложения. Мне нужен установщик, чтобы добавить его. в настоящее время я запускаю приложение после установки, которое затем добавляет это для входа элементов в код с помощью LSSharedFileListRef... Пример такого подхода можно найти здесь: как сделать ваше приложение открытым при входе в систему?. Причина этого не в порядке, мне нужно сделать мое приложение установить с Apple Remote Desktop через командную строку, когда на экране входа в систему. Таким образом, приложение не должно запускаться автоматически после установки.

2 ответов


вот варианты, которые я исследовал и экспериментировал с:

Вариант 1: Используйте Элементы Входа

Это метод, который я использовал. Это очень легко сделать из файла bash, добавив следующую строку в свой postflight.

defaults write /Library/Preferences/loginwindow AutoLaunchedApplicationDictionary -array-add '{Path="/Applications/Your Application.app";}'

Примечание: вам даже не придется беспокоиться о добавлении дубликатов, если вы переустановите приложение. Процесс loginwindow удаляет дубликаты при их чтении.

Я проверил это на 10.5, 10.6 и 10.7
@noa говорит, что это не работает на mountain lion (10.8), лично не подтвердил.

Вариант 2: LaunchAgent

уникальные последствия использования агента запуска:

  1. ваше приложение не отображается в списке элементов входа, поэтому пользователь должен знать, что они делают, чтобы избавиться от него
  2. пользователь не может завершить процесс приложений без запуска: помощью следущей разгрузить / Библиотека / LaunchAgents / com.ваш.пакет.файл plist

вот код, который вы можете использовать для создания агента запуска в вашем файле bash:

cat > /Library/LaunchAgents/com.your.application.agent.plist << EOT
<?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>com.your.application.agent</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/Your Application.app/Contents/MacOS/Your Application</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
EOT

Вариант 3: скомпилируйте код Obj-c в двоичный

Я никогда не заканчивал этот подход. По-видимому, именно такой подход использует Novell. По сути, вы создадите приложение foundation, которое вызывает библиотеки, на которые ссылается это решение: как сделать ваше приложение открытым на логин?

другое

не пробовал это, но согласно этому сообщению, если вы хотите, чтобы он работал на tiger, вам нужно использовать AppleScript..? Я не могу подтвердить или опровергнуть это, но подумал, что эта ссылка может быть актуальной. редактирование элементов входа Mac OS X в Objective-C через AppleScript


есть два способа запуска программы во время входа в систему:

  1. использовать "объекты входа".
  2. настройка LaunchAgent

в LaunchAgent проще, все что вам нужно-это a .plist файл, который говорит launchd загрузить программу, а затем поместить этот файл в /Library/LaunchAgents (как часть пакета установки).

элементы входа в систему немного боль, и это для каждого пользователя.