首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署后.Net未授权访问异常

部署后.Net未授权访问异常
EN

Stack Overflow用户
提问于 2016-02-02 17:12:13
回答 1查看 831关注 0票数 1

我将内部web应用程序部署到服务器A,并在服务器B上创建文件时出错。如果我在本地运行,则在服务器B上成功地创建了该文件。

System.UnauthorizedAccessException:对路径'\b\folder\test.pdf‘的访问被拒绝。

应用程序池的标识是网络服务。我让networkservice完全控制服务器B上的目标文件夹。我甚至给了Everyone完全控制,但是它仍然得到了错误。

服务器A运行.NET 7.5。创建文件的代码:

代码语言:javascript
复制
var byteArray = generateArray();
var destination = "\\\\b\\folder\\test.pdf";
try {
    var destinationFile = new FileInfo(destination);
    if (destinationFile.Exists) {
        destinationFile.Delete();
    }
    System.IO.File.WriteAllBytes(destination, byteArray);
} catch (UnauthorizedAccessException) {
    //
}

我看到有人遇到了同样的问题,这里。但它并没有解决我的问题。

解决方案:I将身份更改为管理员帐户,而不是对应用程序池使用network service。它起作用了,但我不完全明白它为什么会起作用。因为A上的网络服务不同于B上的网络服务?

EN

回答 1

Stack Overflow用户

发布于 2016-02-02 17:18:36

尽管您为每个人提供了访问权限,但某些应用程序必须获得特定的许可。这是Window中引入的UAC系统的一部分。这样做是为了增加安全性,这样应用程序就不能在任何用户下运行,并且基本上可以完全访问。

您应该做的是在目录上提供以下访问:

代码语言:javascript
复制
IIS AppPool\NameOfAppPool

这将为您的托管web应用程序提供对该目录的特定访问,因为IIS将能够正确地操作该目录。在编写或阅读之前,可以实现一些代码来帮助验证,这些代码包括:

代码语言:javascript
复制
public static bool ValidateIOPermission(string path)
{
     try
     {
          if(Directory.Exist(path))
               return true;

          else { Directory.CreateDirectory(path); }
     }

     catch(Exception ex) { return false; }
}

上面的代码是一个小示例,基本上试着执行操作并捕获异常,这样您就可以知道是否有访问权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35159661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档