var di = new DirectoryInfo(Root);
var diList = di.GetDirectories();
当访问位于网络上的文本路径“Root”时,上述内容会崩溃。我只在用户首次登录Windows 7时出现(未在其他操作系统上测试)。如果用户使用Windows资源管理器导航到指定的路径,则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
提前感谢您的支持, 约翰
答案 0 :(得分:2)
Microsoft的安全性将阻止您使用应用程序捕获的凭据通过UNC访问SharePoint。因此,在尝试了所有上述解决方案和其他3个网络访问类之后,没有人会看到路径并让我登录所以我只是使用
Process.Start(dir);
并提示用户发生了什么。 Windows资源管理器使用用户的凭据启动并导航到Windows然后使用用户的域帐户登录SharePoint的路径。 Windows可以做到这一点。不适合Microsoft的程序员不能。
答案 1 :(得分:1)
由于你说它发生在网络文件夹上,我的第一个倾向是这个应用程序运行的Windows进程没有安全访问权来读取目录信息。当用户浏览此文件夹时,安全性将通过身份验证,因此您的应用程序现在可以读取它。
如果Root是本地文件夹,该应用程序是否有效?
答案 2 :(得分:1)
最可能的原因似乎是用户需要登录才能访问网络路径。在通过Explorer
访问路径之前,似乎不会发生这种情况。尝试将网络文件夹映射为本地计算机上的驱动器,并将其设置为自动登录。这可能有所帮助。
编辑: - 正如Scottie在另一个答案中指出的那样,运行程序的凭据可能还需要访问共享文件夹。
编辑#2: - 您可以使用P/Invoke
传递凭据 [Ref]。或者您可以按照here的说明调用LogonUser
方法进行模拟。有关假冒和LogonUser
的详细信息,请参阅this question and its answers。