Запуск другого процесса с повышенными правами с использованием других учетных данных пользователя

Я пытаюсь запустить процесс с повышенными правами из процесса без повышенных прав, но мне также нужно предоставить имя пользователя и пароль для пользователя с правами администратора. Я пробовал как метод "runas"для повышения прав, так и использование манифеста, но оба приводят к разным ошибкам.

Например, если я сделаю это (без использования манифеста, требующего повышения):

ProcessStartInfo info = new ProcessStartInfo(path);

info.UseShellExecute = false;
info.UserName = username;
info.Password = securePwd;
info.Domain = "MyDomain";
info.Verb = "runas";

var proc = Process.Start(info);

Процесс запускается без отображения диалогового окна подтверждения UAC и завершается ошибкой при попытке выполнить команду, требующую прав администратора (я просто пытаюсь для записи тестового файла в каталог Program Files).

Если я добавляю в целевое приложение манифест, указывающий, что ему требуется повышение прав, я получаю исключение Win32Exception, указывающее, что для операции требуется повышение прав.

Проблема, по-видимому, заключается в установке UseShellExecuteв false(поскольку оба подхода работают нормально, когда это не так), но я должен установить для него значение false, чтобы запустить процесс под другой учетной записью пользователя.

Как запустить процесс с повышенными правами из процесса без повышенных прав и указать имя пользователя и пароль вручную?

BOUNTY EDIT:Хотя от пользователя нельзя требовать вводаучетных данных администратора, диалоговое окно UAC вполне приемлемо.Я не собираюсь обходить UAC здесь.

20
задан Adam Robinson 28 March 2012 в 17:19
поделиться