2009-05-26 2 views
0

У меня есть алгоритм поиска, который пытается разрешить расположение каталога на локальном диске. Каталогу, очевидно, потребуется доступ к другим каталогам, присутствующим в системе, если он ищет подкаталог одного из них. Однако при этом я продолжаю получать UnauthorizedAccessException.Приобретение привилегий доступа активного пользователя

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

+1

Возможно, вы захотите включить дополнительную информацию о том, какой язык/рамки программирования вы используете. – Marplesoft

+0

Какая ОС вы используете? –

+0

BTW, устанавливая законный вопрос программирования, подобный этому, как «вики сообщества» - отличный способ убедиться, что многие люди не будут беспокоиться о том, чтобы дать вам ответ. Вы должны быть в настроении «работать бесплатно» :-). Удачи –

ответ

0

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

Ваш алгоритм должен поймать UnauthorizedAccessException, принять, что ему не разрешено перемещаться дальше по этой папке и действовать так, как папка пуста.

Это означает, что иногда вы получите ответ, что каталог, который вы ищете, не существует, когда он технически существует. Ничего страшного. Так оно и должно быть. Если у вас нет разрешения на это, для вас это не существует.

Папки, защищенные правами некоторых других пользователей, являются «частными». Программа, которую выполняет «Джо», не должна смотреть на папки, принадлежащие «Мэри». В этом весь смысл разрешений.

Существует очень мало контролируемых исключений из правила. Как известно, Disk Backup и Антивирусные приложения должны иметь возможность перемещаться по всему диску, независимо от разрешения на доступ к папке. Они делают это, настраивая службу под высокоприоритетной учетной записью (возможно, «SYSTEM», возможно, что-то еще). Вероятно, это будет учетная запись, которая содержит SeBackupPrivilege.

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

Это не значит, что это «перебор»; это то, что это «неправильно». Он не играет по правилам.

+0

> Программа, которую выполняет «Джо», не должна смотреть на папки, принадлежащие «Мэри». Очень верно, поэтому в моем вопросе я заявил, что хотел бы, чтобы алгоритм имел доступ к только к каталогам, к которым у текущего пользователя есть доступ. Я выполнял тесты с моим алгоритмом, и похоже, что в системе есть «призрак» (не призванные к скрытому) файлы, которые вызывают исключения, с которыми я столкнулся. Поймать исключение здесь, я думаю, оправдан, но я все же думаю, что предоставление алгоритма доступа к текущему активному пользователю не является опасным. как это сделать. – gogole

+1

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

Смежные вопросы