23

ユーザーがログインしたときに実行するようにMacOSXでアプリケーションバンドルをプログラムで設定するにはどうすればよいですか?

基本的に、HKCU\Software\Microsoft\Windows\CurrentVersion\RunWindowsのレジストリキーに相当します。

4

5 に答える 5

18

アプリケーションをユーザーの「ログイン項目」(System Preferences=>Accounts=[user] の下) に追加するか、launchdエージェントをユーザーの~/Library/LaunchAgentsフォルダーに追加できます (「 」を参照man launchd.plist)。~/Library/LaunchDaemons/アプリにユーザー向け UI がない場合に使用します。他の人が指摘しているように、launchd を使用すると、アプリの起動時、アプリが終了またはクラッシュした場合の動作などを細かく制御でき、「デーモン」スタイルのアプリ (UI なし) に最も適しています。

最初のオプション (ログイン項目) は、プログラムで操作できます ( Gordonからのリンク)。

于 2010-07-28T23:52:23.060 に答える
10

以下の作業例。

ファイルを作成する

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

これは、「ログイン項目」を使用してアプリケーションをスターアップに追加するもう 1 つの方法です。実装方法については、このサンプル プロジェクトを参照してください。

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

于 2014-02-10T15:00:47.270 に答える
6

「正しい」方法は、ログイン時に開始したいプロセス用の LaunchAgent を作成することです。このプロセスには UI があり、純粋なバックグラウンド プロセスであるべきプロセス用の LaunchDaemon があります。インストーラーで、ユーザー、すべてのユーザー、またはシステムのいずれかの正しいフォルダーに plist をドロップします。この方法が優れている理由は、launchd を使用してプロセスの実行方法を制御できるためです。たとえば、プロセスがクラッシュしたり、ユーザーによって強制終了されたりした場合でもプロセスが実行され続けるようにする組み込み機能が含まれます。

于 2010-07-29T19:26:00.610 に答える
4

Qt / C++を使用しているすべての人のために、これをここに捨てたいと思いました。Qt では、QSettings クラスを介して plist を非常に簡単に使用できます。サンプル ダミー アプリケーションのコード スニペットを確認してください。

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");
}
于 2010-10-28T00:10:19.583 に答える