سؤال

أحاول التكرار فوق العناصر الموجودة في قائمة ابدأ، لكنني أتلقى تلقي unauthorizedaccessExcepection. أنا مالك الدليل ومستخدمي هو مسؤول.

ها هي الطريقة الخاصة بي (في مشروع DLL):

// root = C:\Users\Fernando\AppData\Roaming\Microsoft\Windows\Start Menu
private void walkDirectoryTree(DirectoryInfo root) {
    try {
        FileInfo[] files = root.GetFiles("*.*");
        foreach (FileInfo file in files) {
            records.Add(new Record {Path = file.FullName});
        }
        DirectoryInfo[] subDirectories = root.GetDirectories();
        foreach (DirectoryInfo subDirectory in subDirectories) {
            walkDirectoryTree(subDirectory);
        }
    } catch (UnauthorizedAccessException e) {
        // do some logging stuff
        throw; //for debugging
    }
}

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

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

المحلول

بناء على وصفك، يبدو أنه يوجد دليل لا يستمتع مستخدمك بالوصول عند تشغيله مع تمكين UAC. لا يوجد شيء خطأ بطبيعته في التعليمات البرمجية الخاصة بك والسلوك في هذا الموقف حسب التصميم. لا يوجد شيء يمكنك القيام به في التعليمات البرمجية الخاصة بك للتحصل حول حقيقة أن حسابك ليس لديه حق الوصول إلى هذه الدلائل في السياق قيد التشغيل حاليا.

ما عليك القيام به هو حساب الدليل الذي لا تملكه الوصول إليه. أفضل طريقة هي من خلال إضافة عدد قليل من طرق التمديد. علي سبيل المثال

public static FileInfo[] GetFilesSafe(this DirectoryRoot root, string path) {
  try {
    return root.GetFiles(path);
  } catch ( UnauthorizedAccessException ) {
    return new FileInfo[0];
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top