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

[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 сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 02.06.2018 в 18:05, KIllerrr сказал:

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

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

Изменено пользователем Xipho
Незачем цитировать сообщение целиком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, Sedox сказал:

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

Спойлер

1446410235-1190114200.jpg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, JustHack сказал:
  Показать контент

1446410235-1190114200.jpg

 

Если я всё правильно понял судя по картинке:-D

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×

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

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