#c# #.net #windows
#c# #.net #Windows
Вопрос:
У меня есть консольное приложение, которое удаляет некоторые файлы, и оно может это сделать только в том случае, если оно запущено от имени администратора.
Когда приложение запускается не от имени администратора, я бы предпочел, чтобы оно:
- Закрыть
- и начни все сначала,
- и пользователь, чтобы получить диалоговое окно «запуск от имени администратора Да/нет».
(похоже на notepad , когда вы пытаетесь отредактировать определенный файл, он спрашивает вас, хотите ли вы перезапустить его как администратор)
легко ли это сделать в C# ?
Комментарии:
1. легко ли это сделать в C# ? да, это так (но в порядке 3, 2 ,1) … что вы делали до сих пор? Уже есть ответы на вопрос, как запустить процесс с C# с правами администратора
2. 3, 2, 1 это означает, что я щелкаю правой кнопкой мыши и выбираю открыть от имени администратора, что не связано с кодом. Я хочу, чтобы приложение закрывалось и снова открывалось с помощью диалогового окна Windows с запросом, хотите ли вы открыть его от имени администратора
3. вы запускаете приложение, приложения проверяют, есть ли у них права администратора, если нет, оно запускается с правами администратора, появляется диалоговое окно UAC, экземпляр без администратора может быть закрыт
Ответ №1:
Благодаря мудрым советам в комментариях, мне удалось это сделать.
static void Main() { if (!IsAdministrator()) { Console.WriteLine("restarting as admin"); StartAsAdmin(Assembly.GetExecutingAssembly().Location); return; } ... } public static bool IsAdministrator() { var identity = WindowsIdentity.GetCurrent(); var principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } public static void StartAsAdmin(string fileName) { var proc = new Process { StartInfo = { FileName = fileName, UseShellExecute = true, Verb = "runas" } }; proc.Start(); }