2016-01-11 3 views
8

मेरे मैक एप्लिकेशन से, मुझे \ Library \ ColorSync \ Profiles में एक फ़ाइल लिखनी होगी। इसके लिए, ऐप को फ़ोल्डर को लिखने के लिए व्यवस्थापक विशेषाधिकार की आवश्यकता है। आवेदन में वही प्राप्त करना संभव है? किसी भी तरह की सहायता को आभार समझेंगे।मैक एप्लिकेशन में पुस्तकालय ColorSync Profiles में फ़ाइल लिखने का विशेषाधिकार प्राप्त करना

मैं निम्नलिखित कोड के साथ अनुमति संवाद पॉप अप करने में सक्षम हूँ झलकी

NSSavePanel *tvarNSSavePanelObj = [NSSavePanel savePanel]; 
[tvarNSSavePanelObj setDirectoryURL:[NSURL URLWithString:@"/Library/ColorSync/Profiles"]]; 

__block NSString *filePathexn = nil; 

[tvarNSSavePanelObj beginSheetModalForWindow:[NSApplication sharedApplication].mainWindow completionHandler:^(NSInteger tvarInt) { 
    if(tvarInt == NSModalResponseOK){ 
     NSURL* tvarUrl = [tvarNSSavePanelObj URL]; 
     NSLog(@"doSaveAs filename = %@",[tvarUrl path]); 
     NSString *filePath = [tvarUrl path]; 
     filePathexn = [filePath stringByAppendingPathExtension:@"rtf"]; 
     OSStatus status; 
     if(![[NSFileManager defaultManager]isWritableFileAtPath:filePath]){ 
      NSLog(@"Not Writable at path"); 
      AuthorizationRef authRef; 
      AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0}; 
      AuthorizationRights rights = {1, &right}; 
      status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagPreAuthorize, &authRef); 
      AuthorizationFlags authFlags = kAuthorizationFlagDefaults | kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize; 
      status = AuthorizationCopyRights(authRef, &rights, kAuthorizationEmptyEnvironment, authFlags, NULL); 
     } 
     BOOL status1 = [[NSFileManager defaultManager]createFileAtPath:filePathexn contents:nil attributes:nil]; 

    } else if(tvarInt == NSModalResponseCancel) { 
     return; 
    } else { 
     NSLog(@"doSave As tvarInt not equal 1 or zero = %3ld",(long)tvarInt); 
     return; 
    } 
}]; 

मुझे पता है कि कैसे फ़ाइल लिखने किया जा सकता है की जरूरत है। अभी भी पथ पथ पर लिखा नहीं है। क्या कोई उपकरण नाम निर्दिष्ट करने की आवश्यकता है? क्या SMJobless() के साथ यह संभव होगा? कृपया एक समाधान की सलाह दें !!

+0

आप महत्वपूर्ण जानकारी प्रदान नहीं कर रहे हैं। –

+0

@ElTomato मैंने कुछ संपादन किए हैं। क्या आप अब टिप्पणी कर सकते हैं? – iGo

+0

आपका आवेदन किसके लिए लक्षित है? यदि आप मैक ऐप स्टोर के माध्यम से अपना एप्लिकेशन वितरित करना चाहते हैं, तो आपको उपयोगकर्ता को व्यवस्थापकीय प्रमाणीकरण के लिए संकेत देने की अनुमति नहीं दी जाएगी। –

उत्तर

0

एक अन्य समाधान मैं यहाँ पोस्ट कर रहा हूँ कर सकेंगे। मैं ऐप वितरण गाइड के माध्यम से चला गया। यह उल्लेख किया गया है कि ऐप स्टोर के पक्ष में वितरित किए गए ऐप के लिए प्राधिकरण एपीआईएस की अनुशंसा नहीं की जाती है। कोई भी तरीका यह समाधान मेरे लिए काम कर रहा है, यह थोड़ा हैक है, मुझे नहीं पता। मैं एप्पल स्क्रिप्ट को एप्लिकेशन को चलाने का प्रयास करता हूं, जो फ़ोल्डर (chmod 777 पथ) को पूर्ण विशेषाधिकार देता है और मेरे कार्य को अंतिम विशेषाधिकार सेट पर वापस सेट करने के बाद देता है।

- (void)runapplescript{ 
NSDictionary* errorDict; 
NSAppleEventDescriptor* returnDescriptor = NULL; 
NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource: 
           @"do shell script \"chmod 777 /Library/ColorSync/Profiles\" with administrator privileges"]; 
returnDescriptor = [scriptObject executeAndReturnError: &errorDict]; 

} 
+0

chmod एमवी के बजाय अधिक पसंद किया जाता है। आइटम को कुछ अस्थायी स्थान में सहेजें और इसे/लाइब्रेरी/फ़ोल्डर में ले जाएं। – iGo

1

मैं 2 दृष्टिकोण सुझा सकता हूं। एक दृष्टिकोण तेज है लेकिन बहिष्कृत है। दूसरा दृष्टिकोण आधुनिक है, लेकिन कोडिंग और पढ़ने प्रलेखन का एक सा की आवश्यकता है: STPrivilegedTask

  • :

    1. आप bash स्क्रिप्ट लिखने जो आपको क्या चाहिए करेंगे और विशेषाधिकारों जो कुछ इस तरह का उपयोग कर दी जाएगी साथ निष्पादित करने की जरूरत है विशेषाधिकार प्राप्त सहायक उपकरण जो रूट विशेषाधिकारों के साथ सबसे पहले पहुंच पर एक बार स्थापित किया जाएगा लिखें और आप किसी भी विशेषाधिकार प्राप्त आपरेशन How to write privileged helper tool
  • +0

    हाय, क्या आप कुछ और विवरणों के साथ सलाह दे सकते हैं? क्या मैं अपने प्रोजेक्ट में एसटीप्रिविल्ड टास्क का उपयोग कर सकता हूं, क्या यह अब काम करेगा? अगर मैं एक विशेषाधिकार प्राप्त सहायक उपकरण लिखता हूं तो क्या मुझे अपने आवेदन के लिए रूट विशेषाधिकार मिल सकते हैं? आपके पास कोई नमूना है? कृपया – iGo

    +0

    सलाह दें कि यह आपके द्वारा कार्यान्वित करने की आवश्यकता पर निर्भर करता है। STPrivilegedTask आपके लिए काम करेगा लेकिन आपके कोड में बहिष्करण के बारे में कुछ चेतावनियां होंगी। STPrivilegedTask का उपयोग करने का बुरा पक्ष - यह हर बार होता है जब आपको कुछ विशेषाधिकार प्राप्त ऑपरेशन की आवश्यकता होगी, आपको उपयोगकर्ता से अनुरोध पासवर्ड की आवश्यकता होगी। मुझे लगता है कि यह उपयोगकर्ता के अनुकूल नहीं है। तो मेरा सुझाव - यदि इस ऑपरेशन का शायद ही कभी उपयोग किया जाता है और आपके पास शोध सहायक उपकरण अवधारणा के लिए समय नहीं है- STPrivilegedTask का उपयोग करें। अन्यथा विशेषाधिकार प्राप्त सहायक उपकरण का उपयोग करें। – toohtik

    +0

    लेकिन कृपया ध्यान दें, अगर आप प्राधिकरण के बिना व्यवस्थापक विशेषाधिकार चाहते हैं एक्सेक्यूट विथ प्राइवेटिज आपको केवल विशेषाधिकार प्राप्त सहायक उपकरण की आवश्यकता है। – toohtik

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