KIllerrr Опубликовано 2 июня, 2018 Поделиться Опубликовано 2 июня, 2018 (изменено) Всем привет. Решил дополнить уроки от 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. Изменено 2 июня, 2018 пользователем KIllerrr 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
JustHack Опубликовано 2 июня, 2018 Поделиться Опубликовано 2 июня, 2018 А не проще добавить манифест? Ссылка на комментарий Поделиться на другие сайты Поделиться
KIllerrr Опубликовано 3 июня, 2018 Автор Поделиться Опубликовано 3 июня, 2018 19 часов назад, JustHack сказал: А не проще добавить манифест? Ты прав. Но Я же не говорил, что только этот способ рабочий. Есть много способов. Я показал один из них. Ссылка на комментарий Поделиться на другие сайты Поделиться
Sedox Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 (изменено) В 02.06.2018 в 18:05, KIllerrr сказал: Всем привет. Решил дополнить уроки от Xipho, Спасибо,полезно Изменено 12 января, 2019 пользователем Xipho Незачем цитировать сообщение целиком. Ссылка на комментарий Поделиться на другие сайты Поделиться
JustHack Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 (изменено) [censored] Изменено 11 апреля, 2020 пользователем JustHack Ссылка на комментарий Поделиться на другие сайты Поделиться
Sedox Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 1 минуту назад, JustHack сказал: Показать контент Если я всё правильно понял судя по картинке Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения