(C #) Как проверить, является ли путь защищенным путем в Windows, для изменения которого требуется повышение прав?

StackOverflow https://stackoverflow.com/questions/837009

  •  10-07-2019
  •  | 
  •  

Вопрос

У нас есть папка, в которой наше приложение потенциально может считывать, записывать и создавать / удалять файлы, и хотя мы можем по умолчанию перейти в безопасное место, мы разрешаем пользователю выбирать другой каталог. Как мы можем проверить, является ли выбранный ими каталог «безопасным»?

Мы не хотели бы требовать повышения прав администратора во время выполнения, и этот путь будет использоваться для последующих запусков приложения, поэтому недостаточно проверять, может ли наш процесс в настоящее время выполнять запись в это расположение, поскольку он может будь то, что приложение запускается с правами администратора в первый раз (на самом деле это происходит при запуске установщиком, потому что установщик запускается с повышенными правами), и если они выбирают защищенное местоположение, в следующий раз, когда они пытаются запустить приложение, у них не будет доступ к каталогу. В этом месте потенциально хранятся ГБ постоянных данных, поэтому запрос нового места и перемещение файлов не являются идеальным решением.

Это было полезно?

Решение

Мало того, что любая папка может иметь любые разрешения, но они могут меняться в любое время, в том числе между проверкой файла и его использованием . На самом деле, единственное, что вы можете сделать, - это просто использовать файл и обрабатывать исключение, когда оно терпит неудачу.

Другие советы

Поскольку для любой папки могут быть установлены разрешения, однако администратор сочтет нужным, единственный реальный способ выяснить это - узнать, с каким пользователем он будет работать (в данный момент вошел в систему пользователь?), а затем выполнить проверку доступа, чтобы убедиться, что пользователь имеет соответствующий доступ к этому каталогу.

Другой совет об изменении разрешений в любое время действителен, но проверка во время установки все же лучше, чем не проверка вообще.

Поскольку первый запуск будет повышен, вероятно, вы захотите запустить отдельный процесс без повышений, чтобы проверить местоположение, а затем исходный экземпляр сможет продолжить, зная, что расположение будет работать, если / пока кто-то другой не изменит разрешения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top