Тестирование UNC Path "Доступность" - PullRequest
5 голосов
/ 20 апреля 2011

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

Есть ли "чистый" способ проверить доступность UNC, и если учетные данные Windows по умолчанию неверны, запросите их для других?

Сейчас я использую неприятный код, чтобы попытаться прочитать текстовый файл на общем ресурсе, перехватить IOException, а затем открыть объект процесса "explorer.exe" (скрытый), чтобы получить приглашение для входа в систему. Все это содержится в цикле, который проверяет снова через 10 секунд. Это вроде работает, но решение и логика кажутся действительно нежелательными.

Действительно ли мой единственный выбор WNetUseConnection или решение в стиле взаимодействия?

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

Проверьте эти статьи:

  • Проверка прав доступа к файлам в .NET 2.0 .Удобный класс для проверки разрешений файловой системы.
  • Исключения Vexing .Эрик Липперт (Eric Lippert) о том, почему упреждающее тестирование бессмысленно (в двух словах: существует неявное условие гонки. Между тестом и фактическим доступом какой-то другой процесс может изменить разрешения, переместить или удалить файл, или сеть может упасть ...и т. д. Это означает, что вам приходится иметь дело с исключениями, возникающими при попытке получить доступ к ресурсу, поэтому вы вполне можете структурировать свой код для решения проблемы, когда она действительно возникает.

У меня естьиспользуется такой код:

new FileIOPermission(FileIOPermissionAccess.Read, path).Demand();

, который должен выдавать SecurityException, если у вас нет нужного доступа, но для путей на сетевых дисках или путей UNC, метод FileIOPermission.Demand() выглядит так:быть неоператором.

0 голосов
/ 20 апреля 2011

Я никогда не делал этого , но вы можете попросить проверить список контроля доступа (ACL) в NTFS.

Я выполнил поиск в Интернете для c # и "Access Control List "и получил пару совпадений, которые могут вас заинтересовать.Это может быть чище, но не может быть проще того, что вы уже делаете.

...