मेरे पास .pkg है जिसे स्थापित करने की आवश्यकता है। यह मूल रूप से कई घटकों वाले मेरे ऐप को अपडेट करने के लिए है। Pkg में एजेंट, डेमन और एक सहायक होते हैं। पोस्ट स्क्रिप्ट में मैं सूडो $ USER लॉन्चर लोड / लाइंस / लंचअर्जेंट / डेली.प्लिस्ट के माध्यम से एजेंट शुरू कर रहा हूं। मैं pkg की स्थापना को स्वचालित करना चाहता हूँ। इस pkg को स्थापित करने के लिए इंस्टॉलर कमांड लाइन का उपयोग किया जा रहा है। यह ठीक काम करता है जब मैं Xcode से ऐप चलाता हूं और pkg सफाई से स्थापित होता है।
लेकिन जब मैं Xcode में अपने ऐप को डिबग मोड से नहीं चला रहा हूं और मेरा ऐप इंस्टॉल हो गया है और मैं हेल्पर टूल (रूट के रूप में रनिंग) की मदद से pkg इंस्टॉल करने का प्रयास करता हूं, तो इंस्टॉलर कमांड निष्पादित हो रहा है। लेकिन समस्या एजेंट के लोडिंग के साथ है। एजेंट कभी शुरू नहीं होता।
लेकिन जब मैं एजेंट को लोड करने के लिए SUDO कमांड के बजाय Su कमांड का उपयोग करता हूं जो
su -l $ USER -c "/ bin / launchctl लोड /Library/LaunchAgents/myApp.plist" का उपयोग कर रहा है, तो एजेंट शुरू हो जाता है।
लेकिन मुझे SU के उपयोग में समस्या आ रही है जिसमें हेल्पर टूल इंस्टॉलेशन बाद में विफल हो जाता है।
इसलिए 1. SUDO कमांड विफल क्यों हो रही है और एजेंट को लोड करने में सक्षम नहीं है जब इसे रूट के रूप में चल रहे टूल से चलाया जा रहा है (यह टूल डेमन द्वारा शुरू किया गया था)।
- यदि मैं एजेंट को SU के माध्यम से लोड करता हूं, तो मेरा सहायक उपकरण इंस्टॉलेशन विफल हो जाता है।
अद्यतन :::: मैं एजेंट शुरू करने में सक्षम था। लेकिन समस्या बनी रहती है क्योंकि हेल्पर टूल इंस्टॉलेशन विफल हो जाता है जो ऑथेंटिकेट करने की कोशिश करता है। यहाँ प्रमाणीकरण कोड है: प्राधिकरणपरिवर्तनभीआरआरएफ = NULL; प्राधिकरणकरण। ऑथराइजेशन राइट्स ऑरट्राइट्स = {1, एंड ऑर्ट इटेम}; प्राधिकरणकरण झंडे झंडे = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
OSStatus status=AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess)
{
DLog(@"Failed to create AuthorizationRef, return code %i", status);
}
else
{
result = SMJobBless(kSMDomainSystemLaunchd, (__bridge CFStringRef)label, authRef, &outError);
if (!result && error)
{
*error = (__bridge NSError *)(outError);
}
}