Sharepoint 使用SPWebConfigModification的SecurityException

Sharepoint 使用SPWebConfigModification的SecurityException,sharepoint,Sharepoint,在尝试以编程方式修改web.config时,我遇到了一个SecurityException,“拒绝访问” 代码如下: public override void功能已激活(SPFeatureReceiverProperties) { //创建修改 SPSecurity.runWithLevelatedPrivileges(委托() { SPWebConfigModification m=新的SPWebConfigModification(); m、 Path=“配置/SharePoint/Safe

在尝试以编程方式修改web.config时,我遇到了一个SecurityException,“拒绝访问”

代码如下:

public override void功能已激活(SPFeatureReceiverProperties)
{
//创建修改
SPSecurity.runWithLevelatedPrivileges(委托()
{
SPWebConfigModification m=新的SPWebConfigModification();
m、 Path=“配置/SharePoint/SafeControls”;
m、 Name=string.Format(CultureInfo.InvariantCulture,“安全控件[@Assembly='{0}'][@Namespace='{1}'][@TypeName='*'][@Safe='True']],ADSWebPart.GetAssemblyFullName(),ADSWebPart.GetNamespace());
m、 序列=0;
m、 所有者=SPContext.Current.Web.CurrentUser.Name;
m、 类型=SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
m、 Value=string.Format(CultureInfo.InvariantCulture,“,ADSWebPart.GetAssemblyFullName(),ADSWebPart.GetNamespace());
//应用修改
SPWebService=SPWebService.ContentService;
WebConfigModifications.Add(m);
service.Update();
service.ApplyWebConfigModifications();
});
}
(我从没有调用RunWithElevatedPrivileges()开始,得到了相同的异常,然后继续封闭越来越多的代码,直到封闭FeatureActivated()的所有主体。)


欢迎想法,谢谢。

出于好奇,web.config是否设置为只读?您是否检查了inetpub中web目录在文件系统上的权限


另外,这是在Web应用程序级别上激活的还是在更低级别上激活的?

我没有回答您的问题,但您为什么要使用功能接收器来添加SafeControl条目

添加SafeControl条目的“正确”方法是将这些条目嵌入解决方案的相应in manifest.xml中,如下所示:

<Assembly Location="MyLib.dll" DeploymentTarget="WebApplication">
  <SafeControls>
    <SafeControl Assembly="MyLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4489c7aa5341e32c" Namespace="MyNs" TypeName="*" Safe="True" />
  </SafeControls>
</Assembly>

而不是使用SPContext.Current.Web.CurrentUser.Name

尝试按照此处的说明模拟SystemAccount:

另一个问题,您是否从基于表单的身份验证站点激活该功能?您可能会遇到问题,因为网站集管理员来自身份验证提供程序路径,而不是AD。Web.Config文件的安全性基于AD帐户,因此您无法在不执行错误操作的情况下更新Web.Config,例如授予每个人对Web.Config的访问权限

这是我之前就这个话题提出的一个问题


应用程序池帐户在本地框中为admin;web.config不是只读的;正在web应用程序级别执行激活。谢谢。正在模拟的应用程序池帐户也是服务器场管理员吗?应用程序池帐户是服务器场管理员。
<Assembly Location="MyLib.dll" DeploymentTarget="WebApplication">
  <SafeControls>
    <SafeControl Assembly="MyLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4489c7aa5341e32c" Namespace="MyNs" TypeName="*" Safe="True" />
  </SafeControls>
</Assembly>