2012-07-28 14 views
6

मैं प्रलेखन और SMJobBless उदाहरण और इंटरनेट पर विभिन्न चर्चाओं को पढ़ रहा हूं। मेरा ऐप अब SMJobBless() का उपयोग करके एक विशेषाधिकार प्राप्त सहायक स्थापित करता है, लेकिन सहायक बिल्कुल नहीं चलता है।क्या SMJobSubmit() SMJobBless द्वारा स्थापित विशेषाधिकार प्राप्त सहायक को निष्पादित करने के लिए उपयोग किया जा सकता है?

सहायक का पूरा उद्देश्य एक ऐप का एक महत्वपूर्ण घटक लोड करना है, जब भी एप्लिकेशन शुरू होता है। मैंने उदाहरण दिखाए हैं कि एक्सपीसी के माध्यम से सहायक से जुड़ने की कोशिश करने से सहायक लॉन्च होगा, लेकिन मैं अपने सहायक को सरल और गूंगा रखना चाहता हूं।

एपीआई दस्तावेज़ दिखाता है कि SMJobSubmit() फ़ंक्शन है। यह वास्तव में क्या करता है? क्या मैं इसे SMJobBless() द्वारा पहले स्थापित विशेषाधिकार प्राप्त सहायक लॉन्च करने के लिए उपयोग कर सकता हूं?

मैं launchd और Service Management Framework के सभी शर्तों से उलझन में हूं - उदाहरण के लिए, "रनएटलोड" प्लेस्ट विकल्प नियंत्रित करता है "क्या नौकरी लोड होने के समय आपकी नौकरी लॉन्च की जाती है"। वास्तव में "लोड" और "लॉन्च" क्या है, और वे "आशीर्वाद/इंस्टॉल" और "सबमिट" से कैसे संबंधित हैं?

उत्तर

9

SMJobBless लॉन्च की प्रणाली में आपका काम जोड़ देगा। ऐसा करने के लिए SMJobBless नमूना कोड देखें।

http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html

हालांकि, launchd का पूरा उद्देश्य और जब नौकरियों (नमूना कोड में) शुरू कर रहे हैं, और डिफ़ॉल्ट रूप से, वहाँ वास्तव में जब काम शुरू किया जाना चाहिए का कोई विनिर्देश है कैसे नियंत्रित करने के लिए है, इसलिए नौकरी वास्तव में कभी शुरू नहीं की जाएगी।

नेथन डी वेरी ने एसबीजेबबलेस का उपयोग करने और XPC का उपयोग करके विशेषाधिकार प्राप्त नौकरी के साथ संवाद करने के लिए एक बहुत अच्छा लेख और नमूना कोड लिखा था। एक आयात पक्ष प्रभावित है, ज़ाहिर है कि लॉन्च सेवा के साथ संवाद करने की कोशिश करने का कार्य वास्तव में आपकी सेवा शुरू करने के लिए लॉन्च हो जाएगा, इसलिए यह आपकी समस्या का समाधान करेगा।

http://atnan.com/blog/2012/02/29/modern-privileged-helper-tools-using-smjobbless-plus-xpc/

और विशेष रूप से अपने सवाल का जवाब देने, SMJobSubmit एक विशेषाधिकार प्राप्त सहायक निष्पादित कर सकते हैं। मुझे पता लगाने में काफी समय लगा, लेकिन दोनों के बीच का अंतर यह है कि SMJobSubmit आपको लॉन्च डी का उपयोग करके विशेषाधिकारों के साथ निष्पादन योग्य चलाने देगा, जबकि SMJobBless स्थायी रूप से लॉन्चडेमॉन जोड़ देगा। SMJobBless के स्थापित निष्पादन योग्य धन्य रहेगा, जबकि SMJobSubmit आपको प्रत्येक बार फिर से प्रमाणीकृत करने की आवश्यकता होगी।

ध्यान दें कि दोनों मामलों में आपको एक नया संस्करण उपयोग करने के लिए पिछले एक को SMJobRemove करना चाहिए।

  • SMJobRemove, SMJobSubmit हर बार जब आप अपने आवेदन शुरू, प्रमाणीकरण के लिए उपयोगकर्ता से हर बार उत्साह:

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

या

  • उपयोग नाथन के कोड, XPC कनेक्ट करते हैं, यह अपने संस्करण संख्या से पूछते हैं, अगर अपने को अद्यतन नहीं है, यह छोड़ें, फिर SMJobRemove, SMJobBless एक नया संस्करण है, तो XPC जोड़ने और उन्हें यह पूछना है अपने kext स्थापित करें। इस तरह उपयोगकर्ता को केवल किसी भी नए संस्करण के लिए प्रमाणित करना होगा।
+1

इस विषय पर पीटर के ब्लॉग पोस्ट में नमूना कोड और SMJobSubmit के बारे में अधिक जानकारी शामिल है: http://www.stairways.com/blog/2012-08-06-smjobsubmit –

+0

जैसा कि आप इसके बारे में कुछ जानते हैं, आप http://stackoverflow.com/questions/11557026/smjobremove-succeeds-but-plist-and-helper-tool-not-deleted पर एक नज़र डालें? – Joe