Как настольное приложение .NET Framework может получить повышенные привилегии?

#windows #visual-studio-2019 #.net-framework-4.8

#Windows #visual-studio-2019 #.net-4.8

Вопрос:

Цель

Цель состоит в том, чтобы вызвать диалоговое окно UAC и разрешить приложению временно повысить привилегии для выполнения действий, требующих доступа администратора, но не требующих запуска всего приложения с повышенными привилегиями.

Процессы имеют фиксированные разрешения, верно?

Если я правильно помню, модель «процесса» на уровне операционной системы требует, чтобы процесс завершался с теми же привилегиями, с которыми он начинается (т. Е. невозможно изменить).

Итак, единственный способ «повысить» — запустить новый процесс. С этим проблем нет — процесс может делать то, что ему нужно, чтобы затем завершиться, с межпроцессным взаимодействием по мере необходимости. Но что такое «современный.NET way ‘ для запуска процесса?

Все еще существует ли декларативный параметр?

Есть старые статьи (например, эта статья C # Corner для VS 2012 ), в которых обсуждается добавление декларативного условия безопасности в app.manifest :

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  

… однако я не могу следовать инструкциям в статье … похоже, что добавление манифеста приложения вообще не является чем-то в VS 2019 (VS 2019, .NET Framework 4.7.2, консольное приложение):

Нет возможности добавить манифест

Или программный вариант — единственный способ?

Я полагаю, что мог бы использовать System.Diagnostics.ProcessStartInfo для указания .verb = "runas" , чтобы запустить процесс. Есть ли лучшая альтернатива?

Комментарии:

1. чтобы добавить манифест, перейдите в проект, добавьте новый элемент, выберите файл манифеста приложения. Отредактируйте файл, и вы найдете инструкции внутри. дополнительный <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> эффект: запуск приложения вызовет UAC, и все это будет выполняться с правами администратора. Все дочерние процессы также будут работать.

2. @Mahobo да, это то, что я прочитал, но диалоговое окно для <right-click-project> -> Add > New Item ... (Ctrl Shift A) не включает обещанную опцию для манифеста приложения. Я отредактировал вопрос, чтобы показать рисунок

3. это есть в VS2019. Когда я запускаю новый проект (формы или консоль), я нажимаю SHIFT CTRL A, и манифест становится доступным. Понятия не имею, почему оно отсутствует на вашей стороне

4. @Mahobo спасибо за утверждение, что оно должно быть там… проведя дальнейшее расследование, я обнаружил, что я не поставил галочку «Разработка .NET для настольных компьютеров» в установщике VS! Теперь это исправлено!