测试UNC路径“可访问性”

时间:2011-04-20 14:53:52

标签: c# .net networking

我的程序需要访问某个UNC路径,但路径是跨域的,因此根据运行程序的计算机,它可能有也可能没有默认凭据。通常,用户只需打开资源管理器并输入UNC或IP地址即可获得登录提示(此时他们可以为共享所在的域键入适当的凭据)。

是否有一种“干净”的方式来测试UNC的可访问性,如果默认的Windows凭据是坏的,那么提示他们使用不同的那些?

现在我正在使用一些讨厌的代码来尝试读取共享上的文本文件,捕获IOException,然后打开“explorer.exe”进程对象(隐藏)以获取登录提示。这都包含在10秒后再次检查的循环中。它有点工作,但解决方案和逻辑似乎真的不合适。

我唯一的选择是WNetUseConnection还是互操作式解决方案?

2 个答案:

答案 0 :(得分:3)

检查这些文章:

  • Testing File Access Rights in .NET 2.0。一个用于测试文件系统权限的便捷类。
  • Vexing exceptions。 Eric Lippert关于为什么先发制人测试毫无意义(简而言之:存在一种隐含的竞争条件。在测试和实际访问之间,其他一些进程可能会更改权限,移动或删除文件,或者网络可能会丢失......这意味着您必须处理在尝试访问资源时抛出的异常,因此您可能会构建代码以在实际发生时处理问题。

我使用过这样的代码:

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

如果您没有所需的访问权限,则应该抛出SecurityException,但对于网络驱动器或UNC路径上的路径,FileIOPermission.Demand()方法似乎是无操作。< / p>

答案 1 :(得分:0)

我从未这样做过,但您可能要做的是检查NTFS中的访问控制列表(ACL)。

我对c#和“访问控制列表”进行了网络搜索,并获得了一些您可能感兴趣的点击。这可能更干净,但你已经在做的事情可能并不容易。