10

インストーラーの一部として実行される postflight スクリプトからログイン項目にアプリケーションを追加する方法が必要です。10.5 以降で動作する必要があります。できれば、bash スクリプトで動作します。私のアプリケーションにはすでに管理者権限が必要です。

ここで見つけたアプローチ: Mac OS Login Items with Arguments? 正しい軌道に乗っているように見えました(以下に含まれています)...しかし、コマンドラインで試したときに機能しませんでした。すべてのユーザーにインストールする方法がわかりません。このコードを呼び出す前に、スタートアップ項目に既に追加されています。

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

私はlaunchdでも何かできると思います。しかし、どのアプローチがバージョン間の互換性のためのベスト プラクティスであるかはわかりません。

注: アプリ内で目的の c コードを使用して追加したくありません。インストーラーを追加する必要があります。 現在、私はインストール後にアプリケーションを起動し、LSSharedFileListRef を使用してコードでログイン項目に追加しています...そのアプローチの例は次のとおりです. これがうまくいかない理由は、ログイン画面で、コマンド ライン経由で Apple Remote Desktop を使用してアプリケーションをインストールする必要があるためです。そのため、インストール後にアプリケーションが自動的に起動しないようにする必要があります。

4

2 に答える 2

15

私が調査して実験したオプションは次のとおりです。

オプション 1: ログイン項目を使用する

これは私が使用した方法です。postflight に次の行を追加することで、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

起動エージェントを使用することによる固有の影響は次のとおりです。

  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 を使用する必要があります..? それを確認することも否定することもできませんが、このリンクは関連性があると思いました. AppleScript を使用して Objective-C で Mac OS X ログイン項目を編集する

于 2011-10-04T04:19:49.467 に答える
3

ログイン時にプログラムを開始するには、次の 2 つの方法があります。

  1. ログインアイテムを使う
  2. LaunchAgent をセットアップする

LaunchAgent は最も単純です。必要なのは、launchd にプログラムをロードするように指示する .plist ファイルだけであり、そのファイルを (インストール パッケージの一部として) /Library/LaunchAgents に配置します。

ログイン項目は少し面倒で、ユーザーごとです。

于 2011-09-13T12:18:56.763 に答える