سؤال

وأنا أحاول أن تعيين أذونات المجلد وكل من انها الأطفال على جهاز كمبيوتر ويندوز فيستا. رمز لدي حتى الآن هو هذا.

 public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl, 
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None, 
                             AccessControlType.Allow));

            info.SetAccessControl(ds);            
        }

ولكن انها لا تعمل كما أتوقع أن.
حتى لو كنت تشغيل التعليمات البرمجية كمسؤول فإنه لن تعيين الأذونات.

والمجلد وأنا أعمل مع يقع في C: ProgramData \ <مجلد بلدي> \ ويمكنني تغيير حقوق يدويا على أنه على ما يرام

وأي أحد يريد أن لي نقطة في الاتجاه الصحيح.

هل كانت مفيدة؟

المحلول

وهكذا كان الجواب اثنين أضعاف. أولا مجلد فرعي كان يجري إنشاؤها قبل تم تعيين الأذونات على المجلد وكنت بحاجة لأو في أحد أكثر العلم على أذونات لتجعل من ذلك كل من المجلدات والملفات ورثت الأذونات.

public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl,
                             InheritanceFlags.ObjectInherit |
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None,
                             AccessControlType.Allow));
            info.SetAccessControl(ds);            
        }

وبعد أن يظهر كل شيء للعمل.

نصائح أخرى

وهذا قد يكون السؤال البكم، ولكن هل حاولت تنفيذ الإجراء نفسه يدويا (على سبيل المثال، باستخدام مستكشف)؟ ويندوز فيستا لديه بعض الدلائل التي لا يمكن حتى للمستخدمين في مجموعة المسؤولين تعديل دون اتخاذ خطوات إضافية. أعتقد أن هناك نوعان من الخطوات تحتاج إلى أن تأخذ أولا.

أولا، استخدام مستكشف لجعل نفس التعديل كنت تحاول القيام به في التعليمات البرمجية. إذا فشلت، استكشاف ذلك.

وثانيا، اختبار التعليمات البرمجية الخاصة بك على الدليل الذي تم إنشاؤه ضمن مجلد المستخدم الخاص بك. يجب أن لا تحتاج privs مشرف للقيام بذلك. وينبغي أن يكون قادرا على تغيير ACL على المجلدات تحت مثل حساب تسجيل الدخول لل ج: \ المستخدمين \ يورنامي \ الوثائق

.

وكنت خطوة أيضا من خلال التعليمات البرمجية في المصحح والبحث في وجوه "س" قبل دعوة لSetAccessControl. قد تظهر لك شيئا غير متوقع لتعيين لك على الطريق الصحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top