2
var di = new DirectoryInfo(Root);
var diList = di.GetDirectories();

访问位于网络上的文本路径“根”时,上述崩溃。我仅在用户首次登录 Windows 7 时发生(未在其他操作系统上测试)。如果用户使用 Windows Explorer 导航到指定路径,则 di 能够检索目录。

我知道可以做一个捕获并提示用户单击打开 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

提前感谢您的支持,约翰

4

3 回答 3

2

Microsoft 的安全性将阻止您使用应用程序捕获的凭据通过 UNC 访问 SharePoint。因此,在尝试了上述所有解决方案和其他 3 个网络访问类之后,没有人会看到路径并让我登录,所以我只是使用

Process.Start(dir);

并提示用户发生了什么。Windows 资源管理器使用用户的凭据启动并导航到 Windows 然后使用用户的域帐户登录到 SharePoint 的路径。Windows 可以做到。不为微软工作的程序员不能。

于 2013-07-18T17:16:53.887 回答
1

既然您说它发生在网络文件夹上,我的第一个倾向是运行此应用程序的 Windows 进程没有读取目录信息的安全访问权限。当用户浏览到此文件夹时,安全性已通过身份验证,因此您的应用程序现在可以读取它。

如果 Root 是本地文件夹,该应用程序是否有效?

于 2013-07-11T00:20:33.953 回答
1

最可能的原因似乎是用户需要登录才能访问网络路径。在通过 访问路径之前,这似乎不会发生Explorer。尝试将网络文件夹映射为本地计算机上的驱动器并将其设置为自动登录。这可能会有所帮助。

编辑:- 正如Scottie在另一个答案中指出的那样,程序运行的凭据可能还需要访问共享文件夹。

EDIT#2:-您可以使用P/Invoke传递凭据[Ref]。或者您可以调用LogonUser方法来进行模拟,如此所述。有关模拟的更多详细信息,LogonUser可以在此问题及其答案中找到。

于 2013-07-11T00:28:29.420 回答