Я пытаюсь запустить процесс с повышенными правами из процесса без повышенных прав, но мне также нужно предоставить имя пользователя и пароль для пользователя с правами администратора. Я пробовал как метод "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 здесь.