2016-02-18 2 views
0

Я хочу создать программу, которая находит размеры папок на моих серверах, но ...Сканировать размер папки, если некоторые из них «Доступ запрещен»?

У меня есть несколько папок, в которых у меня нет доступа (fx Роуминг профилей пользователей - на сервере), возможно ли это как администратор получить размер для этих папок?

Я думаю, поскольку система резервного копирования может получить доступ к этим папкам, тогда я тоже должен ... как-то.

EDIT:

Я вижу людей маркировки на мой вопрос, как дубликат, но ..

  1. Как Выдавать мне помочь? С выдающимся я запускаю процесс как другой пользователь, но какой пользователь должен его запускать, чтобы получить размеры папок всех профилей пользователей на сервере (папке)?

  2. Уже опробованный повышенный UAC, как в комментариях, это не имело никакого эффекта. Все еще получаю отказ в доступе.

Так что я все еще не подхожу к решению моего вопроса.

+0

@stuartd Я попытался изменить манифест на ... ... все равно получить "Access Denied". – MojoDK

+0

Похоже, вы пытаетесь использовать локальный администратор, но локальный администратор не имеет прав на удаленном компьютере. В этом случае вы должны посмотреть на навязчивость: http://stackoverflow.com/questions/125341/how-do-you-do-impersonation-in-net –

+0

Mojo, я думаю, вы приближаетесь к недвойственному вопросу , Возможно, задайте новый вопрос с выясненной проблемой: вам нужно получить доступ к папкам на удаленной машине, к которым администратор текущего компьютера не имеет доступа.Моя мысль состоит в том, что вы хотите выдать себя за администратор на удаленной машине, но если это не так, у вас возникнет новый вопрос. –

ответ

1

Если вы хотите продолжить работу со следующей папкой после сбоя, то да; вам придется сделать это самостоятельно. Я бы порекомендовал Stack (сначала глубина) или Queue (сначала bredth), а не рекурсия, и блок итератора (return return); то вы избегаете проблем с переполнением стека и использования памяти.

public static IEnumerable<string> GetFiles(string root, string searchPattern) 
{ 
    Stack<string> pending = new Stack<string>(); 
    pending.Push(root); 
    while (pending.Count != 0) 
    { 
     var path = pending.Pop(); 
     string[] next = null; 
     try 
     { 
      next = Directory.GetFiles(path, searchPattern);      
     } 
     catch { } 
     if(next != null && next.Length != 0) 
      foreach (var file in next) yield return file; 
     try 
     { 
      next = Directory.GetDirectories(path); 
      foreach (var subdir in next) pending.Push(subdir); 
     } 
     catch { } 
    } 
} 

Или Вы можете сделать, как показано ниже:

Вы можете установить программу, чтобы вы могли работать только в качестве администратора.

В Visual Studio:

правой кнопкой мыши на Project -> Свойства -> Безопасность -> Включить Параметры безопасности ClickOnce

После нажатия его, файл будет создан под Папка свойств проекта, называемая app.manifest после ее создания, вы можете снять флажок Включить параметр настройки безопасности ClickOnce

Открыть этот файл и изменить эту строку:

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

к:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Это сделает программа требует прав администратора, и это будет гарантировать, у вас есть доступ к этой папке.

+0

Sry, но это не помогает мне :) Мне нужно получить размер папки, к которой я не могу получить доступ. – MojoDK

+0

Нет ... Администраторы не имеют доступа к папке «Профиль пользователя» (на сервере). Уже попробовал requestExecutionLevel как упоминание в моем комментарии выше, но это не помогло :( – MojoDK

Смежные вопросы