.net и права администратора — как внедрить файл манифеста для 2 разных сценариев

#.net #uac #manifest #rights

#.net #uac #манифест #права

Вопрос:

У меня есть одно .net-приложение, которое будет установлено в разделе «program files», работающее в 2 разных режимах:

  • «ADVANCED_MODE» со всеми включенными плагинами, которые должны открыть UAC для запуска от имени администратора
  • «BASIC_MODE» с загруженным всего несколькими плагинами, которые должны работать как обычный пользователь

Что сделать, чтобы решить этот случай?

Если я внедрю файл манифеста ( requireAdmin установлен на), он не будет работать для BASIC_MODE. Если я не использую никаких манифестов, то у меня нет возможности открыть UAC в ADVANCED_MODE. Если я использую « asInvoker » или « highestAvailable «, я получаю странные эффекты при запуске приложения из Program Files от имени обычной учетной записи пользователя: оно закрывается сразу после запуска без сбоев.

Что бы вы сделали? Какие у меня есть варианты?

Ответ №1:

Используйте asInvoker в своем манифесте, и когда ваше приложение запускается в ADVANCED_MODE (и вы еще не являетесь администратором), запустите новый экземпляр вашего приложения с помощью ShellExecute и глагола «runas».

Эти «странные эффекты» указывают на то, что ваше приложение не может запускаться как не-администратор (без манифеста ваше приложение будет запускаться с некоторыми настройками совместимости, такими как перенаправление файлов и реестра) Вы можете использовать Microsoft Application Compatibility Toolkit, LUA Buglight и Process Monitor для поиска стандартных пользовательских ошибок…

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

1. Спасибо за ваш ответ. Итак, по крайней мере, есть объяснение этим «странным эффектам». Хотя я не могу сделать то, что вы предложили, поскольку мое приложение принимает только один экземпляр, запущенный в системе.

2. @Cristi: Вы можете выполнить изменение прав доступа перед проверкой мьютекса или чего-либо еще, что делает ваша проверка экземпляра…