在以编程方式激活SharePoint 2010中的功能时出现“拒绝访问”错误

时间:2011-11-21 09:54:54

标签: c# sharepoint sharepoint-2010

我是SharePoint的新手,所以我正在关注一些Microsoft学习指南。一个练习是创建一个功能接收器来修改Web.Config文件。 我检测到正在激活或停用的功能,并使用适当的标志调用以下例程。

void setProliferationFlag(bool status)
{
    SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://SharePoint"));
try
{
    SPWebConfigModification mySetting = null;
    if (status)
    {
    mySetting = new SPWebConfigModification();
    mySetting.Path = "configuration/appSettings";
    mySetting.Name = "add [@key='preventProliferation'] [@value='1']";
    mySetting.Sequence = 0;
    mySetting.Owner = "Lab05Owner";
    mySetting.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
    mySetting.Value = "<add key='preventProliferation' value='1' />";
    webApp.WebConfigModifications.Add(mySetting);
}
else
{
    foreach (SPWebConfigModification modification in 
        webApp.WebConfigModifications)
    {
        if (modification.Owner == "Lab05Owner")
        {
            modification.Value = "<add key='preventProliferation' value='0' />";
        }
    }
}
    webApp.Update();
    webApp.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
}
catch
{ 
}

事件接收器工作正常。当我激活该功能时,会运行此代码,但当它到达“webApp.Update()”行时,它会因“访问被拒绝”错误而失败。没有其他错误的错误。我不确定拒绝访问的内容。 我正在笔记本电脑上的开发环境中运行。这是Window 7上的Sharepoint Server 2010安装。

问候蒂姆

1 个答案:

答案 0 :(得分:1)

您很可能需要管理员权限。查看SPSecurity.RunWithElevatedPrivileges method,它允许您在系统帐户的安全上下文中执行此类操作。

您必须提升整个代码,包括打开SPWebApplication对象。您的方法将如下所示:

void SetProliferationFlag(…)
{
    SPSecurity.RunWithElevatedPrivileges(() =>
    {
        // … your code goes here …
    });
}

请注意,在代码中添加空catch子句是一种非常糟糕的做法。始终处理所有异常,至少记录它们并重新抛出。