2013-06-18 3 views
3

Я получаюSystem.UnauthorizedAccessException (А первый шанс исключение)

первый шанс исключение типа в 'System.UnauthorizedAccessException' произошел в mscorlib.dll

исключения из этого бит кода:

string[] filesList = Directory.GetFiles(@"C:\Program Files (x86)\", "*.exe", 
             SearchOption.AllDirectories); 

Что нужно сделать, чтобы распечатать все файлы с помощью .exe, хотя для некоторых каталогов он работает, но некоторые его выбрасывают.

Любые идеи о том, что я могу сделать для его решения, будем очень благодарны!

+0

«Первое исключение случайности» возникает до того, как вызывается обработчик исключений. Если вы не хотите, чтобы VS остановился на них, снимите флажки в Debug> Exceptions. Обратите внимание, что запуск отладчика в качестве администратора, как некоторые предложили, изменит его поведение ... вы должны протестировать свою программу с повышенными привилегиями и без них. –

+0

Спасибо, повышенные привилегии! Наряду с разрешением на безопасность в мета. – ScorpioBlue

ответ

5

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

Вот он правильный способ сделать это:

http://blogs.msdn.com/b/nikhiln/archive/2007/04/19/embed-a-manifest-to-make-an-application-elevate-in-vista.aspx

+0

Отлично, отличная помощь! Большое спасибо. – ScorpioBlue

+0

За исключением того, что вы делаете, когда нет .exe-файла, а именно .dlls? –

+0

@HotLicks, я не уверен, как вы можете выполнять код в dll, не проходя через exe. Даже если вы делаете это косвенно с помощью таких вещей, как rundll32 или powershell, это оба .exe, которые можно запустить как admin. Если вы знаете, что есть .exe, но вы не контролируете его, тогда вы всегда можете создать свой собственный .exe, и он попросит возвышения (и вернет результаты в родительский .exe). –

3

В некоторых версиях окон файлы программных файлов довольно хорошо закрыты. Это предотвращает случайные пользователи от повреждения частей файловой системы, необходимых для правильной работы ОС. Если вы запустите свой отладчик (и приложение) с повышенными привилегиями, он пройдет.

+0

Как запустить dubugger с повышенными привилегиями? Я использую VS 2012. – ScorpioBlue

+0

Перезапустить dev studio; выбор «Запуск от имени администратора»; вы можете сделать это по правому клику. – Bathsheba

3

Если вы используете Vista, Program Files папка защищена операционной системой от UAC.

Приложение, написанное с предположением о том, что пользователь будет запущенно с правами администратора испытываемых проблемами в более ранних версиях в Windows, при запуске из ограниченных учетных записей пользователей, часто потому, что они пытались написать машинно-широкие или системные каталоги (например, Program Files) или ключей реестра. UAC пытается смягчить этот с использованием виртуализации файлов и реестров, который перенаправляет записи (и последующие чтения ) в пользовательское местоположение в профиле пользователя. Например, если приложение пытается писать «C: \ Program файлов \ имя_приложения \ settings.ini» и пользователь не имеет право доступа к записи в этот каталог, то запись будет попадет на «C: \ Users \ имя пользователя \ AppData \ Local \ VirtualStore \ Program Files \ имя_приложения \ settings.ini»

И знать, Program Files является специальная папка. Если вы хотите получить свой путь, вы можете использовать перечисление Environment.SpecialFolder. Подобно;

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) 
Смежные вопросы