Запуск программы от имени администратора из-под пользовательской учетной записи - C#
Формулировка задачи:
Возможно ли как-то запустить сторонее приложение при клике по кнопке в WPF- приложении с правами администатора БЕЗ необходимого ввода пользователем логина и пароля администратора?
То есть, такие условия:
WPF приложение запускается пользователем с обычными правами доступа. Пользователь не имеет прав устанавливать программы на компьютере и запускать программы от имени администратора. WPF-приложение он запустит с обычными правами и в этом приложении он нажмет кнопку, которая запустит в фоновом процессе cmd от имени администратора.
Вся проблема, собственно, в том, что при попытке что-то запустить от имени администратора появляется модальное окно UAC (User Account Control) Windows на экране с предложением ввести логин и пароль администратора.
Можно ли как-то программно передавать UAC логин и пароль, пусть даже зашив их в программный код (понимаю, что это совершенно ненадежно), и при этом не показывая окна UAC или же, по меньшей мере, тут же передавая соответствующие логин и пароль администратора в форму UAC и программно давая разрешение на запуск cmd с повышенными правами? Или же только руками вводить и реализовать то, о чем я говорю, совсем без участия человека не получится?
Вот такой простой код позволяет инициировать запуск от имени администратора (fileName - имя файла (программы)):
Однако он не дает возможности как-то манипулировать UAC.
ProcessStartInfo processInfo = new ProcessStartInfo(); processInfo.Verb = "runas"; processInfo.FileName = fileName; try { Process.Start(processInfo); } catch (Win32Exception) { //Do nothing. Probably the user canceled the UAC window }
Решение задачи: «Запуск программы от имени администратора из-под пользовательской учетной записи»
textual
Листинг программы
return _deleteSelectedFilmCommand ?? (_deleteSelectedFilmCommand = new RelayCommand<Program>(film => { //string s = SelectedItemName; Process proThis = new Process(); ProcessStartInfo psiThis = new ProcessStartInfo("cmd.exe", "/k choco install " + SelectedItem + " -y"); //psiThis.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; psiThis.Verb = "runas"; //psiThis.Domain = "abc.com"; psiThis.UserName = "John"; String password = "qwerty"; var secure = new SecureString(); foreach (var c in password) { secure.AppendChar(c); } psiThis.Password = secure; proThis.StartInfo = psiThis; psiThis.UseShellExecute = true;// Здесь проблема proThis.Start(); proThis.WaitForExit(); if (film == null) return; AllowedPrograms.Remove(film); _selectedItem = null; RaisePropertyChanged(() => SelectedItem); }));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д