#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! Теперь это исправлено!