2010-02-15 39 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

相關問題