Запускать при входе в систему настольное приложение с повышенными привилегиями

Задача широко распространена, но я не удовлетворен найденными мною решениями.

Программа должна работать в фоновом режиме, регулярно сканировать систему на предмет изменения состояния и, при некоторых условиях, показывать всплывающие окна с уведомлениями для пользователей. Программа работает под управлением Windows 7.

Есть два нюанса. Первый, ему необходимы повышенные привилегии (самый высокий уровень, запуск от имени администратора, в Windows есть путаница с терминологией) для сканирования некоторой защищенной системной информации. Во-вторых, он должен работать для всех пользователей с правами администратора.

Вот список типичных решений и причин, по которым они не подходят.

  1. Поместите настольное приложение в папку автозагрузки Windows. Не работает, т.к. не позволяет указать повышенные привилегии. По умолчанию приложение не запускается. В лучшем случае, если настроена совместимость файла, всплывающий запрос UAC будет появляться на экране при каждом запуске программы.
  2. Поместите имя файла в раздел реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run. Те же проблемы.
  3. Добавьте задачу в Планировщик Windows и скажите использовать самый высокий уровень выполнения. Работает только для одного пользователя, под которым запускается задача. Остальные окна не увидят.
  4. Напишите службу Windows. Служба может отслеживать вход в систему пользователей и запускать настольные приложения в их сеансах. Не пробовал, но читал, это возможно, хотя и непросто. Кроме того, сервисы сложнее отлаживать. Похоже на перебор.
  5. Напишите службу Windows, которая принимает вызовы от настольного приложения, выполняет административную работу и возвращает результаты вызывающим абонентам. Настольное приложение работает без привилегий. Решение выглядит очень странно, потому что означает, что бессмысленные службы-оболочки, ничего не делающие, кроме передачи запросов и ответов, должны быть написаны для всех административных задач. С другой стороны, сервисы труднее отлаживать.

Задача выглядит очень обычной, но решения сложны. Я что-то неправильно понимаю? Есть ли способы попроще?

PS: Я ' я видел эту тему Процесс с правами администратора запускается при входе пользователя в систему , но интересно, есть ли менее сложные способы.

ОБНОВЛЕНИЕ

Я обнаружил, что решения со службами Windows также не работают для моего задача. Мне нужен доступ к хранилищу личных сертификатов пользователя. Служба работает под одной учетной записью и требует доступа к сертификатам другой. Я не нашел, как это сделать с помощью API криптографии .Net, и думаю, это невозможно из-за политики безопасности. I posted the solution I finally came up with as the answer to this question.

5
задан Community 23 May 2017 в 12:26
поделиться