У меня необычная ситуация, когда мне нужно задание таймера SharePoint, чтобы иметь права локального администратора Windows и иметь права SHAREPOINT\System
SharePoint.
Я могу получить привилегии Windows, просто настроив службу таймера на использование учетной записи, которая является членом локальных администраторов. Я понимаю, что это не очень хорошее решение, поскольку оно дает службе таймера SharePoint больше прав, чем предполагается. Но это по крайней мере позволяет моему заданию таймера SharePoint запускать stsadm
.
Другая проблема с запуском службы таймера под локальным администратором заключается в том, что у этого пользователя не обязательно будут SHAREPOINT\System
привилегии SharePoint, которые мне также необходимы для этой работы SharePoint. Оказывается, SPSecurity.RunWithElevatedPrivileges
не будет работать в этом случае. Отражатель показывает, что RunWithElevatedPrivileges
проверяет, является ли текущий процесс owstimer
(процесс службы, выполняющий задания SharePoint), и не выполняет повышение прав в этом случае (здесь, я думаю, рациональным является то, что служба таймера должна выполняться под NT AUTHORITY\NetworkService
учетная запись Windows, которая имеет SHAREPOINT\System
привилегии SharePoint, и, следовательно, нет необходимости повышать привилегии для задания таймера).
Единственное возможное решение здесь, по-видимому, состоит в том, чтобы запустить службу таймера под своей обычной учетной записью Windows NetworkService и запустить stsadm в качестве локального администратора, храня учетные данные администратора где-то и передавая их в систему через System.Diagnostics.Process.Run (). Имя пользователя, домен и пароль StarInfo.
Кажется, теперь все должно работать, но вот еще одна проблема, с которой я застрял на данный момент. Stsamd завершается с ошибкой со следующим всплывающим сообщением об ошибке (!) (Winmonals filemon показывает, что в этом случае stsadm работает под администратором):
The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.
Просмотр событий ничего не регистрирует, кроме всплывающего окна.
Пользователь локального администратора - это моя учетная запись, и когда я просто интерактивно запускаю stsadm
под этой учетной записью, все в порядке. Он также отлично работает, когда я настраиваю службу таймера для запуска под этой учетной записью.
Любые предложения приветствуются:)