2012-09-12 33 views
7

好的,我相信我在这里做的事很简单。我写了一个ASP.NET网页,它只是试图写入本地目录。如何配置我的ASP.NET目录以允许编写日志文件?

我使用下面的代码:

System.IO.File.WriteAllLines("log.txt", messages); 

我抛出以下异常。

Access to the path 'c:\windows\system32\inetsrv\log.txt' is denied. 

我的ASP.NET应用程序位于以下目录中。

c:\inetpub\wwwroot\sites\mysite\ 

所以我很困惑,为什么它是试图写入C:\ WINDOWS \ SYSTEM32 \ INETSRV \当我不提供该目录本身的目录。

我已经尝试将代码更改为以下,但它给了我一个新的目录相同的错误消息。

System.IO.File.WriteAllLines("c:\\inetpub\\wwwroot\\sites\mysite\log.txt", messages); 

编辑1

这是很难接受这样的一个答案,因为每个人都真的帮了我一吨。我接受了tom_yes_tom的回答,因为他是第一个发布他的回复,这是我问题的前半部分。我的另一半问题与Fabio指出的hbrock解决方案有关。

+0

什么身份是你的ASP.NET应用程序的应用程序池运行? – kd7

回答

7

创建文件夹“C:\ inetpub \ wwwroot \ sites \ mysite \ App_Data”并保存您的数据。

System.IO.File.WriteAllLines(Server.MapPath("~/App_Data/log.txt")) 

如果你绝对必须将其保存到mysite的目录中,要注意将有一个日志文件的安全后果,并设置目录权限适当的。 IIS正在运行的用户需要能够读取和写入该目录。

完全合格的路径:System.Web.HttpContext.Current.Server

+0

我会试试这个。 – meanbunny

+0

我使用这种方法,仍然有同样的错误。访问路径'C:\ inetpub \ wwwroot \ sites \ mysite \ production \ App_Data \ log.txt'被拒绝 – meanbunny

1

这应有助于:

要授予读,写和修改权限的特定文件

在Windows资源管理器,找到并选择所需的文件。

用鼠标右键单击该文件,然后单击属性。

在“属性”对话框中,单击“安全”选项卡。

在安全选项卡上,检查用户列表。如果网络服务帐户未列出,请添加它。

在属性对话框中,单击网络服务用户名,然后在权限网络服务部分中选择读取,写入和修改权限。

单击Apply,然后单击OK从

信息:您收到“访问路径 'C:\ WINDOWS \ SYSTEM32 \ INETSRV \ log.txt的' http://msdn.microsoft.com/en-us/library/ff647402.aspx#paght000015_fileaccess

+0

我也有这个安全问题。我的第一个尝试是在没有空间的情况下添加NetworkService,但它不能识别安全对象,所以我放弃了这种方法,但是@Fabio Gouw指出它需要一个空间。 – meanbunny

3

被拒绝。“当执行System.IO.File.WriteAllLines(”log.txt“,messages)时,因为c:\ windows \ system32 \ inetsrv是IIS可执行文件所在的目录(w3wp.exe)

您有所以它给你的虚拟目录的物理路径使用使用Server.Mappath。哪个用户正在运行的虚拟目录的应用程序池

看,并给他写你的虚拟目录的文件夹的权限。

+0

好的,我查看了应用程序池,它说它的Identity-> NetworkService。 NetworkService不在实际站点目录的权限列表中。 – meanbunny

+0

按照@ hbrock的入侵为您的文件夹提供NETWORK SERVICE的写入权限 – Fabio

+0

好吧,我会再试一次。我曾尝试过没有空间的网络服务,这可能是我的问题。 – meanbunny