【问题标题】:Set write permission on folder create设置文件夹创建的写入权限
【发布时间】:2012-12-02 20:52:32
【问题描述】:

嗨,我已经尝试正确配置 IIS 6 以提供写入权限大约 2 天了,但我似乎找不到任何好的资源。我对 ASP.NET 有点陌生,直到现在我从来没有必须使用 IIS。

我要做的是将文件上传到服务器。服务器上的每个用户都将拥有自己的特殊文件夹,该文件夹将通过 C# 自动创建。现在当我尝试上传文件时出现此错误:

拒绝访问路径“D:\Projects IDE\Visual Studio\MyWork\Websites\Forum\Images\avatar\userAvatars\aleczandru”

这是我为每个用户创建文件夹并保存文件的代码:

private void addImageToApp()
{
    string path = "~/Images/avatar/userAvatars/" + User.Identity.Name;

    createPath(path);
    if( Directory.Exists(HostingEnvironment.MapPath(path)))
    {
        try {
              UploadImage.SaveAs(HostingEnvironment.MapPath(path));
              MultiViewIndex.ActiveViewIndex = 0;
        }catch(Exception ex)
        {
               AvatarDetails.Text = ex.Message;
        }  
    }
}

private void createPath(string path)
{  
    string activeDir = HostingEnvironment.MapPath("~/Images/avatar/userAvatars");
    if( !Directory.Exists(Server.MapPath(path)) )
    {
        string newPath = Path.Combine(activeDir, User.Identity.Name);
        Directory.CreateDirectory(newPath);
    }
}

我在互联网上只能找到我必须通过文件夹/属性/安全/...添加写入权限,虽然这很好,但我不能为每个文件夹都这样做。

到目前为止,我还不确定 IIS 是否是我需要配置的,对此我有点迷茫。

如何在创建文件夹时自动授予文件夹写入权限?

如果有人有很好的文章或教程来说明如何做到这一点,请与我分享我能找到的所有信息都是非常基本的。

编辑

我已将网络服务帐户添加到具有完全权限的图像文件夹中,并将应用程序的池标识设置为 NetworkService,但我仍然收到相同的错误

编辑

在过去的几天里,为了完成这项工作,我一直在使用 SQL-SERVER,所以我可能错误地配置了一些我理解的网络服务存储在 SQL-SERVER master.db 数据库中的东西。我似乎是有两个网络服务登录可能是这个问题吗?我记得当我第一次检查它时我没有现在我有两个:

【问题讨论】:

  • 和 raheel 的开场白一样愚蠢的是,他确实拥有这部分权利:“现在右键单击您的根图像文件夹,即“图像”。选择属性。选择安全。添加用户网络服务, 并赋予它对该文件夹的 FULL RIGHTS 权限。”你还没有设置Images文件夹的权限,所以你不能写文件,创建文件夹等。
  • 实际上,如果您检查帖子的编辑,我就这样做了
  • 是的,我错过了。对不起。 IIS 6 运行的默认设置是网络服务。我从不费心修改 AppPool 身份。我通常所做的只是设置文件夹权限。您可能还需要检查图像文件夹属性的“写入”复选框,但我发现通常文件夹权限就足够了。
  • 我实际上添加了完整的权限,但它仍然不起作用
  • 确保子对象从父对象继承,以便您的网络服务权限传播到新创建的子文件夹。如果这仍然不起作用,请仔细检查,然后再检查三次,因为一定是遗漏了一些东西。

标签: c# asp.net sql-server iis


【解决方案1】:

很简单,当您的asp.net应用程序运行时,您可以打开任务管理器并找到进程w3wp。 W3wp 进程与任何其他进程一样具有用户身份(默认情况下 - 应用程序池身份 - DefaultAppPool(如应用程序池名称))。 如果是这样,您应该为名为@9​​87654324@ 的用户添加写权限。为此,您应该在文件夹的属性窗口中打开安全选项卡,然后 change->add 并输入 IIS AppPool/DefaultAppPool 并选择本地计算机。

This 的帖子应该可以帮到你!

【讨论】:

    【解决方案2】:

    这与IIS无关,兄弟。您需要做的就是打开您的IIS。转到Application Pool。右键单击您的网站正在运行的应用程序池。选择“高级设置”并查看针对 IDENTITY 所做的条目。将其更改为使用NetworkService。这意味着您现在将在NETWORK SERVICE 帐户下运行您的网站。

    现在右键单击您的根图像文件夹,即“图像”。选择PROPERTIES。选择SECURITY。添加用户NETWORK SERVICE,并赋予其FULL RIGHTS文件夹的权限。

    现在,当您通过代码在此“图像”文件夹下创建文件夹和文件时,它将自动从其父级继承权限,您将允许您做任何您想做的事情(添加/删除)。

    我希望这能回答您的问题。如果是,请将其标记为“已回答”。

    【讨论】:

    • “这和IIS无关,兄弟。你需要做的就是打开你的IIS...” 所以第一步什么都没有与IIS有关的是打开IIS并更改设置?不错:)
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多