Перейти к содержанию

[C#] Делаем запуск программы с привилегиями Администратора.


Рекомендуемые сообщения

Всем привет. Решил дополнить уроки от Xipho, где он создает движок для тренера.

Начнем.

Так как главный вход в приложение описывается в Main(), от сюда начинается выполнение программы( утрирую).

Логично запускать проверку именно здесь.
Подключим библиотеки:

Спойлер

 


using System.ComponentModel;
using System.Diagnostics;
using System.Security.Principal;

 

 

 


Проверка имеющихся у приложения прав выполняется так:

Спойлер

WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);

 

В результате выполнения переменная hasAdministrativeRight будет иметь значение true, если программа имеет права администратора, и false, если не имеет.

Значит, если переменная имеет значение true, нужно выполнять программу, иначе запустить новую копию с правами администратора. Последнее делается так:

Спойлер

 ProcessStartInfo processInfo = new ProcessStartInfo(); //создаем новый процесс
    processInfo.Verb = "runas"; //в данном случае указываем, что процесс должен быть запущен с правами администратора
    processInfo.FileName = Application.ExecutablePath; //указываем исполняемый файл (программу) для запуска
    try
    {
        Process.Start(processInfo); //пытаемся запустить процесс
    }
    catch (Win32Exception)
    {
        //Ничего не делаем, потому что пользователь, возможно, нажал кнопку "Нет" в ответ на вопрос о запуске программы в окне предупреждения UAC (для Windows 7)
    }
    Application.Exit(); //закрываем текущую копию программы (в любом случае, даже если пользователь отменил запуск с правами администратора в окне UAC)

 

А теперь объединим все, что написано выше.

Спойлер

        static void Main()
        {
            WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
            bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
 
            if (hasAdministrativeRight == false)
            {
                ProcessStartInfo processInfo = new ProcessStartInfo(); //создаем новый процесс
                processInfo.Verb = "runas"; //в данном случае указываем, что процесс должен быть запущен с правами администратора
                processInfo.FileName = Application.ExecutablePath; //указываем исполняемый файл (программу) для запуска
                try
                {
                    Process.Start(processInfo); //пытаемся запустить процесс
                }
                catch (Win32Exception)
                {
                    //Ничего не делаем, потому что пользователь, возможно, нажал кнопку "Нет" в ответ на вопрос о запуске программы в окне предупреждения UAC (для Windows 7)
                }
                Application.Exit(); //закрываем текущую копию программы (в любом случае, даже если пользователь отменил запуск с правами администратора в окне UAC)
            }
            else //имеем права администратора, значит, стартуем
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
        }

 

Собственно все.

P.S. Материал взят с сайта cyberforum.

Изменено пользователем KIllerrr
  • Понравилось 2
Ссылка на комментарий
Поделиться на другие сайты

19 часов назад, JustHack сказал:

А не проще добавить манифест?

Ты прав. Но Я же не говорил, что только этот способ рабочий. Есть много способов. Я показал один из них.

Ссылка на комментарий
Поделиться на другие сайты

  • 7 месяцев спустя...
В 02.06.2018 в 18:05, KIllerrr сказал:

Всем привет. Решил дополнить уроки от Xipho, 

Спасибо,полезно;)

Изменено пользователем Xipho
Незачем цитировать сообщение целиком.
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.