2010-07-28 123 views

回答

14

您可以添加應用程序到用戶的「登錄項目」(下系統偏好設置=>帳戶= [用戶]),或者你可以添加一個launchd代理到用戶的~/Library/LaunchAgents文件夾(見man launchd.plist)。如果您的應用沒有面向用戶的用戶界面,請使用~/Library/LaunchDaemons/。正如其他人指出的那樣,launchd可以讓您對應用程序啓動時的控制權,如果應用程序退出或崩潰等情況會發生什麼情況,並且最適合「守護程序」樣式應用程序(無需UI)。

可以操縱第一個選項(登錄項目)programmatically(鏈接從Gordon)。

+0

你能也許我如何能做到這一點使用AppleScript詳細點嗎? (或C++) – 2010-07-29 00:24:16

+3

Apple的[關於該主題的開發文檔](http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html)描述了3種添加登錄項的方法,一個代碼片段和另一個代碼示例鏈接。 – 2010-07-29 06:41:04

+0

plist文件的一個示例以及如何添加它將會非常有用 – Dmitriy 2014-02-10 09:13:54

5

「正確的」方法是爲您希望在登錄時啓動的可能具有UI和LaunchDaemon的進程創建LaunchAgent,以便用於純後臺進程的進程。 在您的安裝程序中,將plist放入正確的文件夾,無論是用戶還是所有用戶,還是系統。這種方法更好的原因是因爲您可以使用launchd來控制流程的運行方式,包括內置的功能,以確保它即使在崩潰或被用戶殺死時也能繼續運行。

+0

這不是一個關鍵的應用程序*必須*保持運行,它只是在首選項對話框中的一個方便的選項。你是說如果用戶退出它,它會繼續運行應用程序?我不希望這種情況發生。 – 2010-07-29 23:02:07

+0

不,我說這是您使用LaunchDaemons時的一個選項。您可以選擇您希望系統如何運行您的應用程序。 – Jeremy 2010-07-30 21:02:10

3

想要在這裏爲使用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"); 
} 
4

下面的一個工作示例。

創建一個文件

〜/庫/ 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

To tes T優需要在終端

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

的是將您的應用程序的其他方式使用「登錄項目來的Starup 」。參見如何執行此示例項目:

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

+0

假設我有一個.list文件的參數作爲應用程序安裝時刻生成的動態值。我怎樣傳遞/發送它? – mthama 2014-09-10 20:03:51

相關問題