c# - 测试 UNC 路径的 "Accessability"

标签 c# .net networking

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

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

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

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

最佳答案

检查这些文章:

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

我使用过这样的代码:

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

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

关于c# - 测试 UNC 路径的 "Accessability",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732347/

相关文章:

c# - 如何防止将系统剪贴板图像数据粘贴到 WPF RichTextBox 中

c# - 如何提高 .Net 中的 JSON 反序列化速度? (JSON.net 还是其他?)

javascript - Node.js 在远程网络上提供 HTML 文件

.net - .NET for Windows 8 配置文件中的程序集列表

.net - 虚拟机的 GA 框架

python - 如何在 Flask 中获取当前端口号?

networking - Docker 容器网络与 Docker-in-Docker

c# - 在辅助方法中断言

c# - FormattedText.BuildGeometry 删除字符

C# List<T> 使用 IComparer 参数排序给出编译错误