2010-07-28 14 views

risposta

14

È possibile aggiungere l'applicazione alla "Elementi login" dell'utente (in Preferenze di Sistema => Account = [utente]) oppure è possibile aggiungere un agente di launchd alla cartella dell'utente ~/Library/LaunchAgents (vedi man launchd.plist). Utilizza ~/Library/LaunchDaemons/ se l'app non ha un'interfaccia utente rivolta all'utente. Come altri sottolineano, launchd ti dà un grande controllo sull'avvio dell'app, su cosa succede se l'app si chiude o si blocca, ecc. Ed è più appropriato per le app in stile "demone" (con la nostra senza interfaccia utente).

La prima opzione (elementi di accesso) può essere manipolata programmatically (collegamento da Gordon).

+0

Potrebbe forse elaborare su come avrei potuto fare questo con AppleScript? (o C++) –

+3

I documenti [dev docs sull'argomento] (http://developer.apple.com/it/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html) descrivono 3 metodi per aggiungere un elemento di login , con uno snippet di codice per uno e un collegamento al codice di esempio per un altro. –

+0

un esempio di file plist e come aggiungerlo sarebbe molto utile – Dmitriy

5

Il metodo "corretto" consiste nel creare un LaunchAgent per i processi che si desidera avviare all'accesso che possono avere un'interfaccia utente e un LaunchDaemon per quelli che devono essere processi in background. Nel programma di installazione trascinare il plist nella cartella corretta, sia per l'utente, sia per tutti gli utenti o il sistema. Il motivo per cui questo metodo è superiore è perché puoi usare launchd per controllare come viene eseguito il tuo processo, inclusa la capacità integrata per assicurarti che continui a funzionare anche se si blocca o viene ucciso dall'utente.

+0

Questa non è un'applicazione critica che * deve * essere mantenuta in esecuzione, è solo per una comoda opzione nella finestra di dialogo delle preferenze. Stai dicendo che continuerà a far girare l'applicazione se gli utenti lo abbandonano? Non voglio che ciò accada. –

+0

No, sto dicendo che è un'opzione quando usi LaunchDaemon. Puoi scegliere come vuoi che il sistema esegua la tua applicazione. – Jeremy

3

Volevo buttarlo qui per chiunque utilizzi Qt/C++. Qt rende super facile usare plists attraverso la classe QSettings. Dai un'occhiata a questo snippet di codice da un'applicazione fittizia di esempio.

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"); 
} 
4

Un esempio di lavoro di seguito.

Creare un file

~/Library/LaunchAgents/my.everydaytasks.plist

Con contenuti:

<?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> 

Vedi il post originale che mi ha aiutato a fare questo esempio:

https://superuser.com/a/229792/43997

Invia t che necessario eseguire questo nel terminale

launchctl load -w ~/Library/LaunchAgents/my.everydaytasks.plist 

Per scaricare

launchctl unload -w ~/Library/LaunchAgents/my.everydaytasks.plist 

Vedi anche

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

L'è l'altro modo di aggiungere l'applicazione per Starup utilizzando "Elementi login ". Vedere questo progetto di esempio su come implementarlo:

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

+0

Supponiamo di avere un parametro del file .list come un valore dinamico generato nel momento dell'installazione dell'applicazione. Come posso passarlo/inviarlo? – mthama