2010-07-28 7 views
14

उपयोगकर्ता लॉग इन करते समय चलाने के लिए प्रोग्राम मैक ओएस एक्स पर प्रोग्राम बंडल कैसे सेट करूं?मैक ओएस एक्स पर स्टार्टअप पर प्रोग्रामेटिक रूप से चलाया जाता है?

असल में, विंडोज़ में HKCU\Software\Microsoft\Windows\CurrentVersion\Run रजिस्ट्री कुंजी के बराबर।

उत्तर

14

आप या आप (man launchd.plist देखें) उपयोगकर्ता के ~/Library/LaunchAgents फ़ोल्डर में एक launchd एजेंट जोड़ सकते हैं (=> खाते = [उपयोगकर्ता] सिस्टम प्राथमिकताएं से कम) उपयोगकर्ता के "लॉग इन आइटम" करने के लिए आवेदन कर सकते हैं। यदि आपके ऐप में उपयोगकर्ता का सामना करने वाला यूआई नहीं है तो ~/Library/LaunchDaemons/ का उपयोग करें। जैसा कि अन्य बताते हैं, लॉन्च आपको ऐप शुरू होने पर बहुत अधिक नियंत्रण देता है, यदि ऐप छोड़ता है या दुर्घटनाग्रस्त हो जाता है, तो क्या होता है और "डेमॉन" शैली ऐप्स (हमारे यूआई के बिना) के लिए सबसे उपयुक्त होता है।

पहला विकल्प (लॉगिन आइटम) programmatically (Gordon से लिंक) का उपयोग किया जा सकता है।

+0

आप शायद मैं कैसे AppleScript के साथ ऐसा कर सकता है पर विस्तृत किया जा सका: यह कैसे लागू करने पर इस उदाहरण परियोजना देखते हैं? (या सी ++) –

+3

एप्पल के [विषय पर देव दस्तावेज़] (http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html) लॉगिन आइटम जोड़ने के लिए 3 विधियों का वर्णन करता है , एक के लिए एक कोड स्निपेट और दूसरे के लिए नमूना कोड के लिए एक लिंक के साथ। –

+0

प्लिस्ट फ़ाइल का एक उदाहरण और इसे कैसे जोड़ना बहुत उपयोगी होगा – Dmitriy

5

"सही" विधि उन प्रक्रियाओं के लिए लॉन्चएजेंट बनाना है जिन्हें आप लॉगिन पर शुरू करना चाहते हैं, जिनके लिए यूआई और लॉन्चडेमॉन हो सकता है जो शुद्ध पृष्ठभूमि प्रक्रियाएं होनी चाहिए। अपने इंस्टॉलर में उपयोगकर्ता को, या सभी उपयोगकर्ताओं या सिस्टम के लिए, अपने फ़ोल्डर को सही फ़ोल्डर में छोड़ दें। इस विधि को बेहतर कारण यह है कि आप यह नियंत्रित करने के लिए लॉन्चड का उपयोग कर सकते हैं कि आपकी प्रक्रिया कैसे चलती है, यह सुनिश्चित करने के लिए अंतर्निहित क्षमता सहित यह सुनिश्चित करता है कि यह उपयोगकर्ता द्वारा क्रैश या मारने पर भी चल रहा है।

+0

यह एक महत्वपूर्ण एप्लीकेशन नहीं है जिसे * चलाना जारी रखा जाना चाहिए, यह वरीयता संवाद में सुविधा विकल्प के लिए है। क्या आप कह रहे हैं कि यदि उपयोगकर्ता इसे बाहर निकलते हैं तो यह एप्लिकेशन को जारी रखेगा? मैं नहीं चाहता कि ऐसा हो। –

+0

नहीं, मैं कह रहा हूं कि जब आप लॉन्चडेमन्स का उपयोग करते हैं तो यह एक विकल्प है। आप यह चुन सकते हैं कि आप सिस्टम को अपना एप्लिकेशन कैसे चला सकते हैं। – Jeremy

3

क्यूटी/सी ++ का उपयोग कर किसी के लिए इसे यहां फेंकना चाहता था। क्यूटी QSettings वर्ग के माध्यम से plists का उपयोग करने के लिए यह बहुत आसान बनाता है। नमूना डमी एप्लिकेशन से इस कोड स्निपेट को देखें।

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

नीचे एक कार्य उदाहरण है।

एक फ़ाइल

~/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 unload -w ~/Library/LaunchAgents/my.everydaytasks.plist 

देखें टर्मिनल

launchctl load -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

संबंधित मुद्दे