我是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安装。
问候蒂姆
答案 0 :(得分:1)
您很可能需要管理员权限。查看SPSecurity.RunWithElevatedPrivileges
method,它允许您在系统帐户的安全上下文中执行此类操作。
您必须提升整个代码,包括打开SPWebApplication
对象。您的方法将如下所示:
void SetProliferationFlag(…)
{
SPSecurity.RunWithElevatedPrivileges(() =>
{
// … your code goes here …
});
}
请注意,在代码中添加空catch
子句是一种非常糟糕的做法。始终处理所有异常,至少记录它们并重新抛出。