от
У меня необычная ситуация, в которой мне нужна работа таймера 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 и выполните команду stsadm как локальный администратор, храня где-то учетные данные администратора и передача его в систему.Диагностика.Процесс.Выполнить() через имя Старинфо, домен и пароль. Вроде все должно работать, но здесь другая проблема, я застрял в данный момент. Stsamd не всплывающее ошибка (!) (Компании winternals Филемон показывает, что средство stsadm работает под админом в данном случае):
The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.
Просмотр событий ничего не регистрирует, кроме всплывающего окна. Локальный пользователь администратор мой аккаунт и когда я просто запустить
stsadm
в интерактивном режиме под этой учетной записью все ок. Он также прекрасно работает, когда я настроить службу таймера на запуск под данной учетной записью. Любые предложения приветствуются :)

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

3 Ответы

0 голосов
от
Я не на работе, так это с верхней части моей головы, но если вы получите ссылку на сайт, ты можешь попробовать создать новый spsite с системой UserToken?
SPUserToken sut = thisSite.RootWeb.AllUsers["SHAREPOINT\SYSTEM"].UserToken;

using (SPSite syssite = new SPSite(thisSite.Url,sut)
{
    // Do what you have to do
}
0 голосов
от
Задания таймера SharePoint работает с SharePoint фирма администратора так как, информация попадает в базу данных SharePoint конфигурация. Таким образом, пул приложений не будут иметь доступа. Для проверки работы таймера в среды разработки, мы можем временно изменить учетную запись пула приложений для учетной записи пула приложений используется для централизованного администрирования.
0 голосов
от
Другими приложениями, если работать таким образом (т. е. от задания таймера с правильными учетными данными) не одинаково с "Приложение не удалось инициализировать неприятностям". Я просто слов простое приложение, которое занимает путь другой исполняемый файл и его аргументы как парамеры и когда бежать с этой работы таймера он не таким же образом.
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 в основном делает то же, что выше фрагмент, но без логина и пароля
...