реализуйте перезапуск от имени администратора в консольном приложении C#

#c# #.net #windows

#c# #.net #Windows

Вопрос:

У меня есть консольное приложение, которое удаляет некоторые файлы, и оно может это сделать только в том случае, если оно запущено от имени администратора.

Когда приложение запускается не от имени администратора, я бы предпочел, чтобы оно:

  1. Закрыть
  2. и начни все сначала,
  3. и пользователь, чтобы получить диалоговое окно «запуск от имени администратора Да/нет».

(похоже на 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(); }