Ошибка «Отказано в доступе» при программной активации функции в SharePoint 2010 - PullRequest
0 голосов
/ 21 ноября 2011

Я новичок в 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 ()», он завершается с ошибкой «Отказано в доступе».Других ошибок на ошибке нет.Я не уверен, что доступ запрещен.Я работаю в своей среде разработки на своем ноутбуке.Это установка Sharepoint Server 2010 в Windows 7.

С уважением, Тим

1 Ответ

1 голос
/ 21 ноября 2011

Скорее всего вам понадобится административный доступ.Посмотрите на метод SPSecurity.RunWithElevatedPrivileges , который позволяет вам выполнять такие действия в контексте безопасности системной учетной записи.

Вам придется запускать весь код с повышенными правами, включая открытие SPWebApplication объект.Тогда ваш метод будет выглядеть следующим образом:

void SetProliferationFlag(…)
{
    SPSecurity.RunWithElevatedPrivileges(() =>
    {
        // … your code goes here …
    });
}

Также обратите внимание, что очень плохо иметь пустые предложения catch в вашем коде.Всегда обрабатывайте все исключения, по крайней мере, регистрируя их и перебрасывая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...