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