如何在Mac OS X上以編程方式設置應用程序包以便在用戶登錄時運行?以編程方式在Mac OS X上啓動時運行?
基本上相當於Windows中的HKCU\Software\Microsoft\Windows\CurrentVersion\Run
註冊表項。
如何在Mac OS X上以編程方式設置應用程序包以便在用戶登錄時運行?以編程方式在Mac OS X上啓動時運行?
基本上相當於Windows中的HKCU\Software\Microsoft\Windows\CurrentVersion\Run
註冊表項。
您可以添加應用程序到用戶的「登錄項目」(下系統偏好設置=>帳戶= [用戶]),或者你可以添加一個launchd代理到用戶的~/Library/LaunchAgents
文件夾(見man launchd.plist
)。如果您的應用沒有面向用戶的用戶界面,請使用~/Library/LaunchDaemons/
。正如其他人指出的那樣,launchd可以讓您對應用程序啓動時的控制權,如果應用程序退出或崩潰等情況會發生什麼情況,並且最適合「守護程序」樣式應用程序(無需UI)。
可以操縱第一個選項(登錄項目)programmatically(鏈接從Gordon)。
「正確的」方法是爲您希望在登錄時啓動的可能具有UI和LaunchDaemon的進程創建LaunchAgent,以便用於純後臺進程的進程。 在您的安裝程序中,將plist放入正確的文件夾,無論是用戶還是所有用戶,還是系統。這種方法更好的原因是因爲您可以使用launchd來控制流程的運行方式,包括內置的功能,以確保它即使在崩潰或被用戶殺死時也能繼續運行。
這不是一個關鍵的應用程序*必須*保持運行,它只是在首選項對話框中的一個方便的選項。你是說如果用戶退出它,它會繼續運行應用程序?我不希望這種情況發生。 – 2010-07-29 23:02:07
不,我說這是您使用LaunchDaemons時的一個選項。您可以選擇您希望系統如何運行您的應用程序。 – Jeremy 2010-07-30 21:02:10
想要在這裏爲使用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");
}
下面的一個工作示例。
創建一個文件
〜/庫/ 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
參見
的是將您的應用程序的其他方式使用「登錄項目來的Starup 」。參見如何執行此示例項目:
假設我有一個.list文件的參數作爲應用程序安裝時刻生成的動態值。我怎樣傳遞/發送它? – mthama 2014-09-10 20:03:51
你能也許我如何能做到這一點使用AppleScript詳細點嗎? (或C++) – 2010-07-29 00:24:16
Apple的[關於該主題的開發文檔](http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html)描述了3種添加登錄項的方法,一個代碼片段和另一個代碼示例鏈接。 – 2010-07-29 06:41:04
plist文件的一個示例以及如何添加它將會非常有用 – Dmitriy 2014-02-10 09:13:54