Запуск программы от имени администратора из-под пользовательской учетной записи - C#

Узнай цену своей работы

Формулировка задачи:

Возможно ли как-то запустить сторонее приложение при клике по кнопке в WPF- приложении с правами администатора БЕЗ необходимого ввода пользователем логина и пароля администратора? То есть, такие условия: WPF приложение запускается пользователем с обычными правами доступа. Пользователь не имеет прав устанавливать программы на компьютере и запускать программы от имени администратора. WPF-приложение он запустит с обычными правами и в этом приложении он нажмет кнопку, которая запустит в фоновом процессе cmd от имени администратора. Вся проблема, собственно, в том, что при попытке что-то запустить от имени администратора появляется модальное окно UAC (User Account Control) Windows на экране с предложением ввести логин и пароль администратора. Можно ли как-то программно передавать UAC логин и пароль, пусть даже зашив их в программный код (понимаю, что это совершенно ненадежно), и при этом не показывая окна UAC или же, по меньшей мере, тут же передавая соответствующие логин и пароль администратора в форму UAC и программно давая разрешение на запуск cmd с повышенными правами? Или же только руками вводить и реализовать то, о чем я говорю, совсем без участия человека не получится? Вот такой простой код позволяет инициировать запуск от имени администратора (fileName - имя файла (программы)):
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
}
Однако он не дает возможности как-то манипулировать UAC.

Решение задачи: «Запуск программы от имени администратора из-под пользовательской учетной записи»

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);
                }));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы