Добавьте приложение в OSX «Элементы входа» во время сценария пост-полета установщика Package Maker - PullRequest
8 голосов
/ 05 августа 2011

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

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

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

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

ПРИМЕЧАНИЕ. Я НЕ хочу добавлять его с помощью некоторого кода Objective-C внутри моего приложения. Мне нужен установщик, чтобы добавить его. В настоящее время я запускаю приложение после установки, которое затем добавляет его к элементам входа в коде, используя LSSharedFileListRef ... Пример такого подхода можно найти здесь: Как Вы открываете свое приложение при входе в систему? . Причина, по которой это не так, заключается в том, что мне нужно установить приложение с Apple Remote Desktop через командную строку, когда на экране входа в систему. Таким образом, приложение не должно запускаться автоматически после установки.

Ответы [ 2 ]

14 голосов
/ 04 октября 2011

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

Вариант 1: использовать элементы входа

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

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

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

Я проверял это на 10,5, 10,6 и 10,7
@ noa говорит, что это не работает с горным львом (10.8), лично не подтверждено.

Вариант 2: LaunchAgent

Уникальные последствия использования Launch Agent:

  1. Ваше приложение не отображается в списке элементов входа, поэтому пользователь действительно должен знать, что он делает, чтобы избавиться от него
  2. Пользователь не может завершить процесс ваших приложений без запуска: launchctl unload /Library/LaunchAgents/com.your.package.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. По сути, вы бы создали фундаментальное приложение, которое вызывает библиотеки, на которые ссылается это решение: Как открыть приложение при входе в систему?

Другое

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

2 голосов
/ 13 сентября 2011

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

  1. Использование элементов входа
  2. Настройка LaunchAgent

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

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

...