الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في تصحيح كود lock/Unlock للدرايفرات

بدأه ماريا اسلام في 16 يناير 2012 · 8 رد · 787 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف حالكم جميعااا؟؟؟

اخوتي الافاضل تواجهني مشكلة ، نحن نريد ان نعمل Lock/UnLock للدرايفرات ، وقد تمت عملية غلق الدرايفر F ولا يمكن الوصول إليه الا عند حساب الآدمنستريتور

وعندما اردت عمل UnLock يقول انه غير قادر على الوصول للقرص ، أرجو احدكم يساعدني بهالمشكلة وجزاكم الله كل خير .

ملاحظة : هذا الكود بالاساس استخدمته لغلق المجلدات ومشي معي تمام جدا في Lock/UnLock لكن نصف العكس مع الدرايفرات ، بمعنى اغلق الداريفر لكنه لم يفيد كود الفتح معه.

كود Lock

ListViewItem LVI;
            DirectoryInfo myDirectoryInfo;
            DirectorySecurity myDirectorySecurity;
            string User;
            LVI = new ListViewItem(dirListBox1.Path.ToString() + dirListBox1.SelectedItem.ToString());
            LVI.SubItems.Add("Locked");
if (TotalLock.Checked)
            {
                myDirectoryInfo = new DirectoryInfo(dirListBox1.Path.ToString() + @"\" + dirListBox1.SelectedItem.ToString());
                myDirectorySecurity = myDirectoryInfo.GetAccessControl();
                User = System.Environment.UserDomainName + "\\" + System.Environment.UserName.ToString();
                //---  
                myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Delete, AccessControlType.Deny));
                myDirectoryInfo.SetAccessControl(myDirectorySecurity);

                myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, AccessControlType.Deny));
                myDirectoryInfo.SetAccessControl(myDirectorySecurity);
                MessageBox.Show("Permissions Altered Successfully");
                LVI.SubItems.Add("Total Lock");
            }

كود UnLock

ListViewItem LVI;
            DirectoryInfo myDirectoryInfo;
            DirectorySecurity myDirectorySecurity;
            string User;
            LVI = new ListViewItem(dirListBox1.Path.ToString() + dirListBox1.SelectedItem.ToString());
            //LVI.SubItems.Add("UnLocked");
            if (listView2.SelectedItems.Count > 0)
            {
                switch (listView2.SelectedItems[0].SubItems[2].Text.ToString())
                {

                    case "Total Lock":
                        //MessageBox.Show(listView1.SelectedItems[0].Text.ToString());
                        myDirectoryInfo = new DirectoryInfo(listView2.SelectedItems[0].Text.ToString());
                        myDirectorySecurity = myDirectoryInfo.GetAccessControl();
                        User = System.Environment.UserDomainName + "\\" + System.Environment.UserName.ToString();
                        //---
                        myDirectorySecurity.RemoveAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, AccessControlType.Deny));
                        myDirectoryInfo.SetAccessControl(myDirectorySecurity);
                        break;

علما انه تم بعد عملية الغلق تصحيح المسار لكنه لم يفيد اطلاقا في ذلك!، والغريب انه اغلق بالمسار الاول قبل التصحيح بعد ذلك!!!

تم تعديل هذه المشاركة بواسطة ماريا اسلام في 16 يناير 2012 في 19:08

ربي هذا العهد لك ... عزم القلب الوفا

#2

السلام عليكم

اختي بشكل سريع: يبدو ان كود Lock قام بحجب صلاحيات المستخدم عن القرص و اعتقد ان هذا ماسبب رسالة الخطأ!

ممكن تضعي رسالة الخطأ الكاملة حتى تتضح الصورة اكثر ؟

#3
Adel Khayata كتب:

السلام عليكم

اختي بشكل سريع: يبدو ان كود Lock قام بحجب صلاحيات المستخدم عن القرص و اعتقد ان هذا ماسبب رسالة الخطأ!

ممكن تضعي رسالة الخطأ الكاملة حتى تتضح الصورة اكثر ؟

وعليك السلام أخينا الكريم

اولا هوا نفذ عملية الغلق وعند الفتح يقول عملية الغلق مغلقة من قبل المسؤول وذلك حالما فقط انقر ع اسم القرص في drivelistbox لأنه عندما اختار اي قرص فلازم يعرض لي ما بداخله ضمن اداة أخرى لعرض المجلدات dirlistbox ، علما ان اسم القرص هذا تغير الى هذا الشكل فقط داخل أداة drive الى f:\]

تم تصحيح كود الفتح عند المسار لو تلاحظ وكان بهالشكل ولكن ما زالت المشكلة قائمة :

            DirectoryInfo myDirectoryInfo;
            DirectorySecurity myDirectorySecurity;
            string User;
            myDirectoryInfo = new DirectoryInfo(driveListBox2.SelectedItem.ToString());
            myDirectorySecurity = myDirectoryInfo.GetAccessControl();
            User = System.Environment.UserDomainName + "\\" + System.Environment.UserName.ToString();
            //---  
            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Delete, AccessControlType.Deny));
            myDirectoryInfo.SetAccessControl(myDirectorySecurity);
            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, AccessControlType.Deny));
            myDirectoryInfo.SetAccessControl(myDirectorySecurity);
            MessageBox.Show("Permissions Altered Successfully");

جزاكم كل خير .

تم تعديل هذه المشاركة بواسطة ماريا اسلام في 16 يناير 2012 في 20:51

ربي هذا العهد لك ... عزم القلب الوفا

#4

طيب ممكن تذكري في أي سطر بالضبط تحدث رسالة الخطأ؟

تم تعديل هذه المشاركة بواسطة Adel Khayata في 16 يناير 2012 في 21:08

#5
Adel Khayata كتب:

طيب ممكن تذكري في أي سطر بالضبط تحدث رسالة الخطأ؟

هنا :

private void driveListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
          dirListBox1.Path = driveListBox1.Drive;
                    fileListBox2.Path = driveListBox1.Drive;
        }

وقد تم تلافي مشكلة الرسالة الخطأ بوضع

private void driveListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                string s = driveListBox1.Drive;
                if (!s.EndsWith("]"))
                {
                    dirListBox1.Path = driveListBox1.Drive;
                    fileListBox2.Path = driveListBox1.Drive;
                }
                else
                {
                    MessageBox.Show("هذا القرص مغلق من قبل المسئول");
                    dirListBox1.Path = "";
                    fileListBox2.Path = "";
                }
            }
            catch (IOException ex)
            {
                MessageBox.Show(ex.ToString());
            }
            catch (Exception ex1)
            {
                MessageBox.Show(ex1.ToString());
            }

اخ الكريم هوا الان ما يقدر يستعرض القرص في الاداة dir لأنه مغلق وهذا ما يشير اليه دائما عند الاختيار قبل ان أضغط ع زر unLock

فما العمل لجعل عملية الفتح تعمل؟!

هل اتضحت الفكرة للأخ الكريم؟؟

ربي هذا العهد لك ... عزم القلب الوفا

#6

أختي: في كود ال Lock أنت تمنعين المستخدم الحالي ( و هو المستخدم الذي يعمل برنامجك ضمن سياقه ) من الوصول إلى معلومات القرص.

في كود Un-Lock أنت تحاولين تعديل خصائص القرص عن طريق المستخدم الحالي و الذي تم منعه من إدارة القرص في كود Lock و لذلك يظهر الخطأ.

جربي أن تستخدمي الصلاحية التالية: FileSystemRights.Modify بدلاً من FileSystemRights.FullControl في كود القفل و إلغاء القفل.

#7
Adel Khayata كتب:

أختي: في كود ال Lock أنت تمنعين المستخدم الحالي ( و هو المستخدم الذي يعمل برنامجك ضمن سياقه ) من الوصول إلى معلومات القرص.

في كود Un-Lock أنت تحاولين تعديل خصائص القرص عن طريق المستخدم الحالي و الذي تم منعه من إدارة القرص في كود Lock و لذلك يظهر الخطأ.

جربي أن تستخدمي الصلاحية التالية: FileSystemRights.Modify بدلاً من FileSystemRights.FullControl في كود القفل و إلغاء القفل.

أشكرك اخي الكريم لعودتك

جربت الآن وعدلت ولكن يرفض ويطلع لي اكسبشن وقد أرفقت لكم صورة a1 بها للتوضيح .

لكن هناك شيئ لاحظته عندما كنت أريد ان أحفظ ملف عادي في المجلد المغلق ، تطلع لي هذه الرسالة a2 الموجودة بالمرفق

ستلاحظ ان الرسالة يقول فيها ان القرص مجلد ولاحظ اخي الكريم كيف ذكر اسم القرص .

وجزاكم الله كل خير .

post-178913-023546500 1327003131_thumb.p

post-178913-085466300 1327003159_thumb.p

المرفقات
a1.pnga2.png

تم تعديل هذه المشاركة بواسطة ماريا اسلام في 19 يناير 2012 في 23:07

ربي هذا العهد لك ... عزم القلب الوفا

#8

طيب أختي ممكن ترفقي نسخة من المشروع حتى يتم تجربتها؟

#9

السلام عليكم

حاولي تشغيل البرنامج كمسؤول من مجلد Debug للمشروع طبعا بعد بناء المشروع

مواضيع مشابهة