Ответы с форумов MSDN

Проверка прав доступа к каталогам в .NET

Date: 14.04.2021 15:16:35

FileIOPermission относится к Code Access Secuiry - встроенному механизму безопасности в .NET (на текущий момент во многом устаревшему и бесполезному на практике). Этот механизм не знает ничего о системных правах доступа к папкам. Обычное приложение (консольное или winforms) выполняется с полным доверием и соответственно имеет доступ ко всей файловой системе, Security Exception в нем вообще никогда не возникнет. Если вам нужно проверить системные права доступа к папке, используйте API вроде  FileInfo.GetAccessControl

Message 40

Date: 15.04.2021 7:43:28

"проверил тип исключения и оно оказалось тип System.Net.WebException, которое как бы не имеет ничего общего с попыткой записи в паку"

Можно еще попробовать свойство InnerException или вызов exception.ToString(). Возможно, где-то во вложенном исключении есть сообщение о настоящей ошибке

Message 39

Date: 16.04.2021 3:11:11

Такую проверку непросто реализовать сравнением с ACL, ведь помимо пользователей, права доступа могут быть назначены группам. Какую реальную проблему вы решаете? Как вам правильно написал Максим, изменяемые данные следует хранить в %APPDATA% или подобной папке, к которой у обычного пользователя есть доступ на запись. Если приложению разово при установке нужно сохранить в Program Files, установку можно запускать с правами администратора. 

Message 38

Date: 16.04.2021 7:44:53

Если приложение должно автоматически обновляться, не требуя прав админа (на момент установки обновления), это обычно решается так: файлы приложения размещаются не в Program Files. В ClickOnce файлы размещаются в AppData\Local\Apps, в популярных приложениях с автообновлением, например Chrome и Github desktop, также в AppData. Не то, чтобы я рекомендовал это, но такое решение существует. Вам зачем нужно проверять права, приложение может устанавливаться в любую папку, и вам надо обновлять только когда есть права на запись? Думаю это можно просто сделать, обрабатывая исключение при попытке записать файл.

Message 37

Date: 16.04.2021 9:30:39

Вы можете просто попытаться создать пустой файл с доступом на запись в папке: new FileStream(path, FileMode.Create, FileAccess.Write); Если нет прав, то на таком коде и получите UnauthorizedAccessException

Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub