繁体   English   中英

var di = new DirectoryInfo(path)引发异常,直到我第一次使用Windows资源管理器打开路径

[英]var di = new DirectoryInfo(path) throws exception until I use Windows Explorer to open the path for a first time

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

当访问网络上的文本路径“ Root”时,以上内容崩溃。 仅当用户首次登录Windows 7(未经其他操作系统测试)时,我才会发生。 如果用户使用Windows资源管理器导航到指定的路径,则di可以检索目录。

我知道可以进行捕获并提示用户单击打开Windows资源管理器并导航到路径的链接,但是我不是解决问题的人。 我希望我的程序能够建立与网络路径的连接,而无需Windows Explorer首先进行连接。

例外:

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

约翰,谢谢您的支持。

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

Process.Start(dir);

并提示用户正在发生的事情。 Windows资源管理器将使用用户的凭据启动,并导航到Windows然后使用用户的域帐户登录SharePoint的路径。 Windows可以做到。 不适用于Microsoft的程序员不能。

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

如果Root是本地文件夹,则该应用程序可以正常工作吗?

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

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

EDIT#2:-您可以使用P/Invoke传递凭据[Ref] 或者,你可以调用LogonUser方法做模拟为解释在这里 有关模拟和LogonUser更多详细信息,可以在此问题及其答案中找到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM