Ответы с форумов 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