测试UNC路径的"可访问性"

Jai*_*Jai 5 .net c# networking

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

有没有"干净"的方法来测试UNC的可访问性,如果默认的Windows凭据是坏的,那么提示他们不同的?

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

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

Nic*_*rey 3

检查这些文章:

  • 测试 .NET 2.0 中的文件访问权限。用于测试文件系统权限的方便类。
  • 令人烦恼的异常。Eric Lippert 解释了为什么先发制人的测试毫无意义(简而言之:存在隐式竞争条件。在测试和实际访问之间,其他一些进程可能会更改权限、移动或删除文件,或者网络可能会丢失......这意味着您必须处理尝试访问资源时引发的异常,因此您可以很好地构建代码以在问题实际发生时处理问题。

我使用过这样的代码:

new FileIOPermission(FileIOPermissionAccess.Read, path).Demand();
Run Code Online (Sandbox Code Playgroud)

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