var di = new DirectoryInfo(путь) выдает исключение, пока я не использую Windows Explorer, чтобы открыть путь в первый раз
var di = new DirectoryInfo(Root);
var diList = di.GetDirectories();
Выше описывается сбой при доступе к текстовому пути "Root", расположенному в сети. У меня возникает только когда пользователь впервые заходит в Windows 7 (не тестировался на других ОС). Если пользователь использует Windows Explorer для перехода по указанному пути, он может извлечь каталоги.
Я знаю, что делать уловки и предлагать пользователю щелкнуть ссылку, которая открывает проводник Windows и перейти к пути, можно, но я не один для обходных путей. Я хочу, чтобы моя программа могла устанавливать соединение с сетевым путем, не требуя, чтобы проводник Windows сделал это первым.
Исключение:
System.IO.IOException: The network name cannot be found.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path,string originalUserPath,
String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler,
Boolean checkHost)
at System.IO.DirectoryInfo.InternalGetDirectories(String searchPattern,
SearchOption searchOption) at Controls.ValidationControl.LoadDBox(Object sender,
RoutedEventArgs e)
in c:\Controls\ValidationControl.xaml.cs:line 1010
Заранее спасибо за поддержку, Джон
3 ответа
Безопасность Microsoft не позволит вам получить доступ к SharePoint через UNC с использованием учетных данных, зафиксированных приложением. Поэтому, после попытки всех вышеупомянутых решений и 3 других классов доступа к сети, никто не будет видеть путь и позволит мне войти, поэтому я просто использовал
Process.Start(dir);
и подскажите пользователю, что происходит. Проводник Windows запускается с использованием учетных данных пользователя и указывает путь, по которому Windows затем использует учетную запись домена пользователя для входа в SharePoint. Windows может сделать это. Программисты, которые не работают на Microsoft, не могут.
Поскольку вы сказали, что это происходит в сетевых папках, я склоняюсь к тому, что процесс Windows, под которым выполняется это приложение, не имеет безопасного доступа для чтения информации каталога. Когда пользователь просматривает эту папку, безопасность аутентифицируется, и теперь ваше приложение может читать ее.
Работает ли приложение, если Root является локальной папкой?
Наиболее вероятная причина - пользователь должен войти в систему, чтобы получить доступ к сетевому пути. Это, кажется, не происходит, пока путь не доступен через Explorer
, Попробуйте сопоставить сетевую папку как диск на локальном компьютере и настроить ее на автоматический вход в систему. Это может помочь
РЕДАКТИРОВАТЬ:- Как указал Скотти в другом ответе, учетные данные, под которыми запускается программа, также могут нуждаться в доступе к общей папке.
РЕДАКТИРОВАТЬ № 2:- Вы можете использовать P/Invoke
передать полномочия [Ref]. Или вы можете позвонить LogonUser
способ сделать олицетворение, как описано здесь. Дальнейшие детали относительно олицетворения и LogonUser
можно найти в этом вопросе и его ответах.