当我试图以编程方式修改web.config时,我得到了一个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()的所有主体。)
欢迎有想法,谢谢。
发布于 2010-02-16 16:02:02
我没有按要求回答您的问题,但是您为什么要使用Feature receiver来添加SafeControl条目?
添加SafeControl条目的“正确”方法是将这些条目嵌入到您的解决方案的相应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>发布于 2010-02-16 02:14:06
出于好奇,web.config是否设置为只读?您是否检查了inetpub中web目录的文件系统权限?
另外,这是在Web应用程序级别或更低的级别激活的吗?
发布于 2010-02-16 19:41:04
而不使用SPContext.Current.Web.CurrentUser.Name;
尝试按照此处的说明模拟SystemAccount:http://blackninjasoftware.com/2009/04/09/how-to-programmatically-impersonate-users-in-sharepoint/
https://stackoverflow.com/questions/2267648
复制相似问题