我的程序需要访问某个 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/