2011-03-20 13 views
7

इससे पहले कि मैं अपने बाकी बालों को खींचूं, मैं इस पर कुछ इनपुट प्राप्त करना चाहता हूं।
मैं एक फ़ोल्डर का स्वामित्व लेने की कोशिश कर रहा हूं। मैं निश्चित रूप से प्रोग्राम के रूप में प्रोग्राम चला रहा हूं और मुझे स्वामित्व लेने का अधिकार है क्योंकि मैं एक्सप्लोरर में मालिक को बदल सकता हूं।किसी फ़ाइल या फ़ोल्डर का स्वामित्व लेना

यदि मैं या तो व्यवस्थापक या मेरे खाते का मालिक है तो मैं मालिक को बदल सकता हूं, और यदि मेरे पास पहले से ही स्वामित्व है तो मैं अनुमतियां बदल सकता हूं।
यदि मैं स्वयं को फ़ाइल का स्वामित्व देने का प्रयास करता हूं, तो सिस्टम के स्वामित्व में कहें, तो मुझे एक अनधिकृत अपवाद मिलता है।

मैंने एक्सेस कंट्रोल विधियों के साथ कुछ अलग-अलग चीजों की कोशिश की है लेकिन कुछ भी काम नहीं करता है, यह नवीनतम विधि मुझे लगता है कि पुस्तक सीधे है।

 private static void makePerm(string file, NTAccount account) 
    { 
     FileInfo finfo = new FileInfo(file); 
     FileSecurity fsecurity = finfo.GetAccessControl(); 
     //also tried it like this //fsecurity.ResetAccessRule(new FileSystemAccessRule(string.Format(@"{0}\{1}", Environment.UserDomainName.ToString(), Environment.UserDomainName.ToString()), FileSystemRights.FullControl, AccessControlType.Allow)); 
     fsecurity.SetOwner(account); 
     finfo.SetAccessControl(fsecurity); 
    } 

मैं इसे विंडोज 7 बीटीडब्ल्यू पर आजमा रहा हूं।
मुझे यहां क्या याद आ रही है?

+0

क्या आप लापता हो रहे हैं कि प्रणाली आप और व्यवस्थापक outranks है:

यहाँ कैसे यह मेरे कोड तय है। –

+0

क्या आप वाकई एक्सप्लोरर में सिस्टम-स्वामित्व वाली फाइल पर स्वामित्व ले सकते हैं? आप ऐसा कहते हैं कि लेकिन बहुत स्पष्ट है। –

+0

हाँ मुझे पता है, लेकिन मैं मालिक से सिस्टम में व्यवस्थापक को व्यवस्थापक में क्यों बदल सकता हूं, लेकिन कोड के साथ नहीं? AFAIK प्रशासक हमेशा किसी भी चीज़ का स्वामित्व ले सकता है। –

उत्तर

1

क्या आपने अपनी प्रक्रिया को यूएसी के माध्यम से पहले बढ़ाया था? विंडोज 7 पर, यूएसी वृद्धि के बिना, आपकी प्रक्रिया कम विशेषाधिकार प्राप्त टोकन के साथ चल रही है।

+0

हां। मैं दोनों उन्नत विशेषाधिकारों के साथ दृश्य स्टूडियो चला रहा हूं और मैंने EXN मैन्युअल रूप से व्यवस्थापक के रूप में चलाने की कोशिश की है। –

+1

आपको SeTakeOwnershipPrivilege को स्पष्ट रूप से सक्षम करने की भी आवश्यकता हो सकती है। – Luke

8

मैं एक ही समस्या थी और सिर्फ यहाँ किसी और जो यहाँ आ सकता है मुझे की तरह खोजने की पोस्टिंग:

आप स्पष्ट रूप से कोड में SeTakeOwnershipPrivilege सक्षम करने के लिए ल्यूक ऊपर उल्लेख के रूप में की जरूरत है। मुझे इस प्रकार की चीज़ से वास्तव में सहायक होने के लिए यह Process Privileges मिला।

using System; 
using System.Diagnostics; 

// ... 
using (new ProcessPrivileges.PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership)) 
{ 
    directoryInfo = new DirectoryInfo(path); 
    directorySecurity = directoryInfo.GetAccessControl(); 

    directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User); 
    Directory.SetAccessControl(path, directorySecurity);  
} 
+1

मुझे पता है कि यह थोड़ा पुराना है, लेकिन मुझे एक ही समस्या का सामना करना पड़ रहा था। समाधान साझा करने के लिए धन्यवाद, यह मेरे लिए एक अनुकूलन के साथ पूरी तरह से काम किया। यदि कोई व्यक्ति किसी और को मालिक बनाना चाहता है: तो आपको विशेषाधिकार विशेषाधिकार की भी आवश्यकता होगी। रेस्टोर। इससे पहले कि आप मालिक को बदल सकेंगे। और यदि आप स्वामित्व लेना चाहते हैं, तो आपको पहले एक नई फ़ाइल सुरक्षा वस्तु बनाने, स्वामित्व लेने और फिर वहां से जाने की आवश्यकता हो सकती है: 'var फ़ाइल सुरक्षा = नई फ़ाइल सुरक्षा();' 'फ़ाइल सुरक्षा। SETOwner (_owner); ' ' File.SetAccessControl (फ़ाइल, फ़ाइल सुरक्षा); – philip

+0

@ फिलिप अपडेट साझा करने के लिए धन्यवाद और खुशी मैं मदद कर सकता हूं। – Maverik

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