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

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

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


person Davy8    schedule 07.05.2009    source источник


Ответы (3)


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

person Joel Coehoorn    schedule 07.05.2009

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

person Max Schmeling    schedule 07.05.2009

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

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

person Kevin    schedule 07.05.2009