2013-03-06 8 views
5

से एक मैक ओएस एक्स (LoginItem) सहायक एप्लिकेशन का शुभारंभ मैं एक आवेदन Main.app और एक आवेदन Helper.app Main.app/Library/LoginItems फ़ोल्डर के भीतर है। मेन.एप उपयोगकर्ता द्वारा शुरू किया जा सकता है, और उपयोगकर्ता लॉगिन आइटम के रूप में Helper.app सेट कर सकते हैं। (SMLoginItemSetEnabled() का उपयोग करके), यह पूरी तरह से काम करता है। जब उपयोगकर्ता लॉगिन आइटम के रूप में हेल्पर.एप सेट करता है तो इसे भी लॉन्च किया जाता है।मुख्य आवेदन

हालांकि, हेल्पर.एप को लॉगिन आइटम के रूप में सेट किए बिना लॉन्च करना भी संभव होना चाहिए। मैं

[[NSWorkspace sharedWorkspace] launchApplication: newPath]; 

जो एक lsboxd देता है के साथ ऐसा करने की कोशिश की है: अनुमति देता है नहीं प्रक्रिया शुरू करने के लिए ... त्रुटि है, और साथ

[NSTask launchedTaskWithLaunchPath:newPath arguments: [NSArray array]]; 

जो देता है एक इनकार मना-sandbox- त्रुटि दोबारा दोहराएं। (? शायद क्योंकि Helper.app अंदर है Main.app)

Newpath इस प्रकार पाया जाता है:

NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:[[[NSBundle mainBundle] bundlePath] pathComponents]]; 
[pathComponents addObject:@"Contents"]; 
[pathComponents addObject:@"Library"]; 
[pathComponents addObject:@"LoginItems"]; 
[pathComponents addObject:@"Helper.app"]; 
[pathComponents addObject:@"Contents"]; 
[pathComponents addObject:@"MacOS"]; 
[pathComponents addObject:@"Helper"]; 
NSString *newPath = [NSString pathWithComponents:pathComponents]; 

कैसे मैं इसे ठीक कर सकते हैं? :)

धन्यवाद,

+0

http://stackoverflow.com/questions/12971549/mac-os-sandbox-launching-main-application-from-helper - यह * * एक हस्ताक्षर करने के मुद्दे कि एक बार चला जाता है हो सकता है ऐप ऐप स्टोर में है – Petesh

+0

1 पासवर्ड (1 पासवर्ड हेल्पर प्रक्रिया के साथ) ऐसा करने में सक्षम लगता है और वे सैंडबॉक्स हैं। मुझे आश्चर्य है कि वे इसे कैसे प्राप्त करते हैं। –

+0

मैं इसके लिए भी खोज कर रहा था और मैंने इसे जिस तरह से वर्णित किया है, मैंने कोशिश की है (सिवाय इसके कि, मैंने पथ को कड़ी मेहनत की है, मैं वास्तव में नहीं देख सकता कि आप ऐसा क्यों करते हैं) और यह तुरंत काम करता है। मुझे नहीं पता कि आप क्या गलत कर रहे हैं (या अगर मैं कुछ गलत कर रहा हूं, जो इसे मेरे लिए काम करता है)। – Sitses

उत्तर

0

आप एनएसटीस्क और लॉन्चक्टल का भी उपयोग कर सकते हैं। उदाहरण या आप एनएसटीस्क और बैश स्क्रिप्ट का उपयोग कर सकते हैं। उदाहरण:

#Run Menu 
if [ $(ps -u $USERNAME | grep -v grep | grep -m1 '/Library/Menu/Menu.app/Contents/MacOS/Menu' | awk '{print $5}') ]; then 
    echo "Menu already running"; 
else 
    echo "Menu not running" 
    if [ $(users $USERNAME) == $USERNAME ]; then 
     echo "User logined" 
     echo "running menu for user $USERNAME" 
     sudo -u $USERNAME /Library/Menu/Menu.app/Contents/MacOS/Menu& 
    else 
     echo "User not logined" 
    fi 
fi