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