none
Как заставить DirectoryInfo.GetDirectories() возвращать состояние всех [под]каталогов (в т.ч. системных), не вызывая UnauthorizedAccessException? RRS feed

  • Вопрос

  • Доброго дня!

    Опять мне приходится обращаться к помощи уважаемых программистов службы поддержки Microsoft.

    Проблема такая - я пытаюсь положить в TreeView дерево каталогов. Пишу так (событие развертывания ветки дерева):

           private void tv_DirList_Expanded_1(object sender, RoutedEventArgs e)
            {
                TreeViewItem item = (TreeViewItem)e.OriginalSource;
                item.Items.Clear();
                DirectoryInfo dir;
                if (item.Tag is DriveInfo)
                {
                    DriveInfo drive = (DriveInfo)item.Tag;
                    dir = drive.RootDirectory;
                }
                else dir = (DirectoryInfo)item.Tag;
                try
                {
                    foreach (DirectoryInfo subDir in dir.GetDirectories())
                    {
                        TreeViewItem newItem = new TreeViewItem();
                        newItem.Tag = subDir;
                        newItem.Header = subDir.ToString();
                        int x = 0;
    try
    {
    x = subDir.GetDirectories().Count<DirectoryInfo>();
    }
    catch { }
    if (x != 0) newItem.Items.Add("*"); item.Items.Add(newItem); } } catch { } }

    И всё бы прекрасно, дерево открывается, каталоги видны, можно выбрать... но только вот видны не все. На диске D проблем нет вообще. На диске C: (системном) не открываются каталоги:

    \System Volume Information

    \Program Data\Application Data

    \Documents and Settings
    \Users\Default User

    и некоторые другие. На строчке

    x = subDir.GetDirectories().Count<DirectoryInfo>();
    возникает перехватываемый прогой эксепшн UnauthorizedAccessException.

    С первыми двумя каталогами более-менее ясно, туда ходить и смотреть нельзя. Но ведь  Documents and Settings и Default User можно открыть, скажем, через Far Manager. Значит, доступ к ним под  Win7 возможен. Как его достичь в WPF ?

    Заранее большое спасибо!



    • Изменено SvarogichRed 9 ноября 2012 г. 9:22
    9 ноября 2012 г. 9:18

Ответы

  • А если попробовать запустить программу от лица администратора? Вообще, вероятно, нужно получать соответствующие привилегии.
    • Помечено в качестве ответа Abolmasov Dmitry 22 ноября 2012 г. 11:45
    9 ноября 2012 г. 10:19
  • С первыми двумя каталогами более-менее ясно, туда ходить и смотреть нельзя. Но ведь  Documents and Settings и Default User можно открыть, скажем, через Far Manager. Значит, доступ к ним под  Win7 возможен. Как его достичь в WPF ?
    Ходить можно везде, но с правами администратора. Как правильно заметил tulosba вам нужно выполнять программу от имени администратора. Если такой подход не устраивает, то просто "глотайте" ошибку с помощью Try Cach и отображайте только валидные папки.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Abolmasov Dmitry 22 ноября 2012 г. 11:45
    9 ноября 2012 г. 10:56
    Отвечающий

Все ответы

  • А если попробовать запустить программу от лица администратора? Вообще, вероятно, нужно получать соответствующие привилегии.
    • Помечено в качестве ответа Abolmasov Dmitry 22 ноября 2012 г. 11:45
    9 ноября 2012 г. 10:19
  • С первыми двумя каталогами более-менее ясно, туда ходить и смотреть нельзя. Но ведь  Documents and Settings и Default User можно открыть, скажем, через Far Manager. Значит, доступ к ним под  Win7 возможен. Как его достичь в WPF ?
    Ходить можно везде, но с правами администратора. Как правильно заметил tulosba вам нужно выполнять программу от имени администратора. Если такой подход не устраивает, то просто "глотайте" ошибку с помощью Try Cach и отображайте только валидные папки.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Abolmasov Dmitry 22 ноября 2012 г. 11:45
    9 ноября 2012 г. 10:56
    Отвечающий
  • Пробовал, не помогает :)

    Да и так моя учётная запись имеет права администратора. 

    Просто я не понимаю, почему Far или TotalCommander папки эти видят, а моя прога - нет. Не критично, но неясно.

    9 ноября 2012 г. 12:04
  • уже глотаю, спасибо :)
    9 ноября 2012 г. 12:04