Sharepoint: выполнение Stsadm из задания таймера + SHAREPOINT \ права системы

голоса
6

У меня необычная ситуация , в которой мне нужно задание таймера SharePoint на оба имеют права локального администратора Windows и иметь SHAREPOINT\Systemпривилегии SharePoint.

Я могу получить привилегии окна, просто настройки службы таймера использовать учетную запись , которая является членом местных администраторов. Я понимаю , что это не является хорошим решением , поскольку она дает службу таймера больше прав SharePoint , то он должен иметь. Но по крайней мере , позволяет моя работа таймера SharePoint для запуска stsadm.

Еще одна проблемы с запуском службы таймера под локальным администратором является то , что этот пользователь не обязательно иметь SHAREPOINT\SystemSharePoint привилегии , которые я также необходимую для этого SharePoint работы. Оказывается, что SPSecurity.RunWithElevatedPrivilegesне будет работать в этом случае. Отражатель показывает , что RunWithElevatedPrivilegesпроверяет , является ли текущий процесс owstimer(процесс обслуживания , который запускает работу SharePoint) и не выполняет Elevation этого дела (рациональный здесь, я думаю, что служба таймера должна работать под NT AUTHORITY\NetworkServiceокном учетной записи , которая , которая имеет SHAREPOINT\SystemSharePoint привилегии, и , таким образом , нет необходимости поднимать привилегии для задания таймера).

Единственное возможное решение здесь, кажется, для запуска службы таймера под его учетной запись обычного NETWORKSERVICE окна и запустить Stsadm в качестве локального администратора, сохраняя учетные данные администратора где-то и передавая их System.Diagnostics.Process.Run () корыто Имени в StarInfo в , домен и пароль.

Кажется, все должно работать, но вот еще одна проблема, я застрял в данный момент. Stsamd не удается с помощью следующего всплывающего окна ошибки (Winternals Филемон показывает, что Stsadm работает под управлением администратора в данном случае) (!):

The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.

Просмотр событий не регистрирует ничего, кроме всплывающих окон.

Локальный пользователь администратор мой счет , и когда я только работать в stsadmинтерактивном режиме под этой учетной записью все в порядке. Он также отлично работает , когда я настроить службу таймера для запуска под этой учетной записью.

Любые предложения приветствуются :)

Задан 06/08/2008 в 18:27
источник пользователем
На других языках...                            


3 ответов

голоса
1

Я не на работе, так это с верхней части моей головы, но: если вы получите ссылку на сайт, вы можете попытаться создать новый SPSite с SYSTEM-UserToken?

SPUserToken sut = thisSite.RootWeb.AllUsers["SHAREPOINT\SYSTEM"].UserToken;

using (SPSite syssite = new SPSite(thisSite.Url,sut)
{
    // Do what you have to do
}
Ответил 06/08/2008 d 18:31
источник пользователем

голоса
0

Задания таймера SharePoint работает с учетными данными SharePoint Firm администратора, поскольку, информация попасть в базу данных SharePoint Config. Таким образом, пул приложений не будет иметь доступ.

Для проверки работы таймера в Dev среды, можно временно изменить учетную запись пула приложений к учетной записи пула приложений, используемый для центра администрирования.

Ответил 09/05/2011 d 15:40
источник пользователем

голоса
0

Другие приложения, если запустить этот путь (т.е. от задания таймера с явными учетными данными) не удается точно так же с «Приложение не удалось инициализировать propely». Я просто Worte простого приложения, которое занимает путь другого исполняемого файла и его аргументы как парамер и при запуске из этой работы таймера он не один и тот же путем.

internal class ExternalProcess
{
    public static void run(String executablePath, String workingDirectory, String programArguments, String domain, String userName,
                           String password, out Int32 exitCode, out String output)
    {
        Process process = new Process();

        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardOutput = true;

        StringBuilder outputString = new StringBuilder();
        Object synchObj = new object();

        DataReceivedEventHandler outputAppender =
            delegate(Object sender, DataReceivedEventArgs args)
                {
                    lock (synchObj)
                    {
                        outputString.AppendLine(args.Data);
                    }
                };

        process.OutputDataReceived += outputAppender;
        process.ErrorDataReceived += outputAppender;

        process.StartInfo.FileName = @"C:\AppRunner.exe";
        process.StartInfo.WorkingDirectory = workingDirectory;
        process.StartInfo.Arguments = @"""" + executablePath + @""" " + programArguments;

        process.StartInfo.UserName = userName;
        process.StartInfo.Domain = domain; 
        SecureString passwordString = new SecureString();

        foreach (Char c in password)
        {
            passwordString.AppendChar(c);
        }

        process.StartInfo.Password = passwordString;

        process.Start();

        process.BeginOutputReadLine();
        process.BeginErrorReadLine();

        process.WaitForExit();

        exitCode = process.ExitCode;
        output = outputString.ToString();
    }
}

AppRunner в основном делает то же самое, как выше фрагмент, но без имени пользователя и пароля

Ответил 07/08/2008 d 11:25
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more