2010-02-15 42 views
2

当以编程方式尝试进行web.config修改时,出现SecurityException,“拒绝访问”。使用SPWebConfigModification的SecurityException

代码紧跟this example

public override void FeatureActivated(SPFeatureReceiverProperties properties) 
    { 
     // create modification 
     SPSecurity.RunWithElevatedPrivileges(delegate() 
     { 
      SPWebConfigModification m = new SPWebConfigModification(); 
      m.Path = "configuration/SharePoint/SafeControls"; 
      m.Name = string.Format(CultureInfo.InvariantCulture, "SafeControl[@Assembly='{0}'][@Namespace='{1}'][@TypeName='*'][@Safe='True']", ADSWebPart.GetAssemblyFullName(), ADSWebPart.GetNamespace()); 
      m.Sequence = 0; 
      m.Owner = SPContext.Current.Web.CurrentUser.Name; 
      m.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode; 
      m.Value = string.Format(CultureInfo.InvariantCulture, "<SafeControl Assembly='{0}' Namespace='{1}' TypeName='*' Safe='True' />", ADSWebPart.GetAssemblyFullName(), ADSWebPart.GetNamespace()); 

      // apply modification 
      SPWebService service = SPWebService.ContentService; 
      service.WebConfigModifications.Add(m); 
      service.Update(); 
      service.ApplyWebConfigModifications(); 
     }); 
    } 

(我开始没有调用RunWithElevatedPrivileges(),得到了同样的异常,然后继续封闭越来越多的代码多达封闭FeatureActivated()的所有机构。)

想法欢迎,谢谢。

回答

3

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

“正确”的方式来增加的SafeControl项是在解决方案的manifest.xml中嵌入这些内部<SafeControls>相应<大会>里面是这样的:相反

<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> 
+0

谢谢,它的工作。我完全错过了这个选项:-) – Ariel 2010-02-16 13:21:10

0

出于纯粹的好奇心,web.config设置为只读吗?你是否检查过inetpub中web目录的文件系统权限?

此外,这是被激活的Web应用程序级别还是进一步下降?

+0

应用程序池帐户是admin在本地框中; web.config不是只读的;正在Web应用程序级执行激活。谢谢。 – Ariel 2010-02-15 18:50:26

+0

应用程序池帐户是否也被农场管理员模拟? – zincorp 2010-02-15 19:01:02

+0

应用程序池帐户是农场管理员。 – Ariel 2010-02-16 00:21:46

0

的另一个问题,是您激活从基于表单的身份验证的网站上的功能?您可能遇到问题,因为网站集管理员来自身份验证提供程序路径,而不是AD。 Web.Config文件安全性基于AD帐户,因此您无需更新web.config而不会执行任何错误操作,例如让Everyone访问web.config。

这是我在该主题上发布的一个早期问题。

Modifying SharePoint app Web.config file with Forms Based Authentication

相关问题