2009-01-19 7 views
5

मैं प्रोजेमेटिकली रूप से निर्देशिका पर एएसपीएनईटी खाते में लेखन पहुंच की अनुमति देने की कोशिश कर रहा हूं। वस्तुओं (कृपया ध्यान दें कि मैं "लेखन पहुँच की अनुमति दी" ASPNET के लिए चाहते हैं बच्चे को प्रचारित किए जाने के साथ-साथ: मैं यह करने के लिए निम्न कोड का उपयोग कर रहानिर्देशिका के लिए एक्सेस अधिकार सेट करना - अपवाद प्राप्त करना "कोई झंडे सेट नहीं किया जा सकता"

static void Main(string[] args) 
      { 


       FileSecurity fileSecurity; 

       fileSecurity = new FileSecurity(); 

       fileSecurity.SetAccessRuleProtection(true, false); 

       fileSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET",FileSystemRights.Write,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow));         

       File.SetAccessControl("C:\\TestDir1", fileSecurity); 
      } 

इस कोड को अपवाद में जिसके परिणामस्वरूप है: " कोई निशानी नहीं लगाई जा सकता है \ r \ nParameter नाम:। inheritanceFlags "

क्या गड़बड़ हो सकती

उत्तर

9

समाधान मिल गया, जाहिरा तौर पर मैं इसे इस तरह से करना होगा:

DirectoryInfo dirInfo = new DirectoryInfo("C:\\TestDir2"); 
      DirectorySecurity dirSecurity = dirInfo.GetAccessControl(); 

      dirSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET", FileSystemRights.Write|FileSystemRights.DeleteSubdirectoriesAndFiles, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)); 


      dirInfo.SetAccessControl(dirSecurity); 
+0

ऐसा प्रतीत होता है कि विरासत झंडे सेट करना तब तक काम नहीं करता जब तक कोई मौजूदा फ़ाइल सुरक्षा वस्तु का उपयोग नहीं किया जाता? यह किसी भी आसान परीक्षण नहीं करता है। – wesm

2

जैसा कि आप इंगित करते हैं, मूल समस्या यह थी कि आप FileSecurity कक्षा (जो फ़ाइलों पर लागू होते हैं, निर्देशिका नहीं) और निर्देशिका के लिए एसीएल सेट करने का प्रयास कर रहे थे, लेकिन यह निम्न कारणों में से किसी भी के लिए भी हो सकता है:

  1. जब एक निर्देशिका के लिए एक नियम की स्थापना, आप InheritanceFlags.None विरासत ध्वज के रूप में निर्दिष्ट है, लेकिन प्रचार झंडा के लिए PropagationFlags.None के अलावा कोई मूल्य अन्य की आपूर्ति (आप विरासत जो मौजूद नहीं है प्रचार नहीं कर सकते हैं) ।
  2. जब एक फ़ाइल के लिए एक नियम की स्थापना, किसी भी InheritanceFlags.None और PropragationFlags.None संबंधित मानकों (फ़ाइलें कंटेनर तो विरासत निर्दिष्ट नहीं किया जा सकता नहीं हैं, और) के अलावा अन्य मान निर्दिष्ट।

आप प्रासंगिक जांच देख सकते हैं कि .NET Framework source for the CheckFlags method में करता है।

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