我有一行代码检查目录是否存在,然后获取其中的文件列表。
System.IO.Directory.Exists(@"\\Server\Folder\");
我在测试它时工作(从 Visual Studio 运行),但是当我部署网站时,它总是返回 false。
我在另一台服务器(假设是 Server2)上对另一个文件夹进行相同的验证,它工作正常。
然后我认为这是一个访问问题,但是共享文件夹和网络对所有人都具有访问权限......还有其他原因导致它无法正常工作吗?
当您在 Visual Studio 中运行代码时,它会在您的用户权限下运行。
当您在 IIS 中运行代码时,它以应用程序池的身份运行,默认情况下是内置用户“网络服务”,这是一个本地用户帐户,无法访问本地计算机之外。
网络共享的权限是第一层,之后是目录的 NTFS 权限检查。
您需要将应用程序池的身份更改为与您的用户具有相同权限的域用户。
我可能有点晚了,但是我发现这个Directory
类的方法有问题。相反,我DirectoryInfo
以这种方式使用了模拟:
new DirectoryInfo(path).Exists
这样您就可以避免整个身份更改问题,我们的 IT 部门否认了这一问题。
我希望这对某人有帮助!
对于将来的参考,这也适用:
bool result = false;
try
{
Directory.GetAccessControl(path);
result = true;
}
catch (UnauthorizedAccessException)
{
result = true;
}
catch
{
result = false;
}
我收到这个错误的代码是这样的 UNC:
@"\Server01\c$\Data\SubFolder"
我做了一个明确的分享,去掉了c$
,让它看起来像这样:
@"\Server01\TheData\SubFolder"
它开始起作用了。
我不是 100% 确定这就是解决权限问题的原因,但它在进行更改后立即开始工作。