【问题标题】:Access to the path is denied in C#在 C# 中拒绝访问路径
【发布时间】:2016-04-13 17:53:30
【问题描述】:

我收到一个错误

{"访问路径 'C:\storing_PAC_history_10_4_2016.xml' 是 拒绝。”}

当我执行以下代码 db.save(path) 的指令时,它会修改位于 ASP.Net 项目中给定路径的文件。

 XDocument doc = XDocument.Load(path);
                    XElement root = new XElement("Command");
                    root.Add(new XElement("StartDateTime", _commandsLog.StartDateTime.ToString()));
                    root.Add(new XElement("CommandName", _commandsLog.CommandName));
                    root.Add(new XElement("Output", _commandsLog.Output));
                    root.Add(new XElement("UserOutput", _commandsLog.UserOutput));
                    root.Add(new XElement("Status", _commandsLog.Status.ToString()));
                    root.Add(new XElement("EndDateTime", _commandsLog.EndDateTime.ToString()));
                    root.Add(new XElement("UserName", _commandsLog.UserName));
                    doc.Element("CommandsLogs").Add(root);
                    doc.Save(path);

`

【问题讨论】:

  • 将文件存储在 C: 驱动器的根目录不是一个好主意。 ASP.NET 应用程序所在目录的子目录会更好。如有必要,您可以将 IIS 设置为不提供该目录中的文件。

标签: asp.net iis c#-4.0


【解决方案1】:

如果您在本地调试您的应用程序,您可能会确保您正在运行具有管理权限的 Visual Studio(即Right-click > Run as Administrator),因为从中派生的进程可能无法访问原本需要它的目录。

否则,您可以检查以下角色之一的权限,具体取决于您使用的 IIS 版本,并确保其具有适当的权限:

  • IIS_IUSRS
  • IIS APPPOOL\DefaultAppPool
  • NETWORK_SERVICE

正如其他人所提到的,授予应用程序 root 访问权限并不是一个好主意。如果您打算以任何生产方式使用它(在本地计算机上运行的快速而肮脏的实用程序应用程序之外),您应该考虑使用应用程序中的子目录并从那里引用文件(即删除您在项目中尝试访问的文件并相对于您的应用程序访问它们)。

【讨论】:

  • 您是否建议让 ASP.NET 应用程序访问驱动器的根目录?据我了解,这通常被认为是一个坏主意。
  • 不,我并不是要提倡这一点。我只是在说明 OP 如何解决权限问题,无论他/她试图访问哪个目录。正如您所提到的,为应用程序提供 root 访问权限并不是一个好主意,因此在应用程序中使用子目录会是一个更好的主意。
猜你喜欢
  • 2011-03-29
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多