Сообщение на экране входа в Windows при запуске служб

Когда я загружаю свой ноутбук с Windows 8.1, я хочу отображать сообщение на экране входа в систему Windows, чтобы знать, когда запущены все службы и процессы запуска. Помимо простого ожидания в течение некоторого количества минут, при условии, что все службы, которые могут запуститься, сделали это, как я могу закодировать процесс для запроса условия «запуск завершен», а затем обновить пользовательский интерфейс?

Возможно ли обнаружение завершения запуска с помощью сценария запуска групповой политики или процедуры планировщика задач, которая срабатывает при каком-либо условии «службы запущены»? Должен ли я искать конкретное сообщение в журнале событий?

Я предполагаю, что для сообщения экрана входа в систему мне нужно написать поставщика учетных данных Windows, и как разработчик C # я считаю, что мне следует смотреть на PGina?

Прежде чем я начну писать код с нуля, может быть, где-то уже есть готовое решение для этого?

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


[править] Удален обширный не относящийся к делу текст с рассуждениями о том, почему я это делаю. Надеюсь на ответ на краткий и целенаправленный вопрос.


person TonyG    schedule 06.08.2015    source источник
comment
Привет, TonyG, ты нашел решение своей проблемы? Не могли бы вы поделиться этим со мной? У меня есть служба, которая отслеживает вставку USB-ключа. Если пользователь вставит ключ, локальная учетная запись пользователя будет активирована и может использоваться для входа в систему.   -  person creg    schedule 06.03.2017
comment
Для этого приложения см. Вариант № 2 от @vivek. Я не писал свой код, потому что даже с CP кажется, что мы все еще не знаем, когда Windows будет готова. Мы знаем только, когда запущены определенные службы. Мне нужно было бы отслеживать список всех служб, которые запускаются при загрузке/входе в систему, а затем удалять каждую из списка по мере их запуска, чтобы правильно предположить, завершена ли загрузка. Я надеялся найти флаг, который могла бы установить сама Windows, когда она исчерпала список автозагрузки. Тогда мне не нужно было бы вести свой список отдельно и вручную.   -  person TonyG    schedule 18.03.2017


Ответы (1)


Да, вам нужно будет использовать Credential Provider (CP). Я больше знаком с C++ и Credential Provider V1, поэтому приведенная ниже терминология взята оттуда. Вы можете легко найти эквивалентный код C# или использовать собственное взаимодействие.

Проверка служб должна быть в методе SetSelected CP.

У вас есть два варианта -

  1. Если вы ждете служб Windows, используйте диспетчер управления службами, чтобы запросить состояние «Запущено».

  2. Если вы ждете своих собственных сервисов, добавьте событие «готово» к каждому из этих сервисов и инициируйте SetEvent оттуда. На стороне поставщика учетных данных используйте WaitForSingleObject для каждой службы по очереди. Вполне возможно, что некоторые службы запустятся раньше других. Это нормально. Однако, если вам нужно показать пользовательский интерфейс, указанный при запуске каждой службы, вы можете использовать WaitForMultipleObjects в цикле и продолжать удалять дескрипторы событий, которые получают сигнал.

person Vivek    schedule 17.01.2016
comment
Большое спасибо за ответ на этот старый запрос. Я займусь кодом для этого в течение следующих нескольких недель. Отметит это как принятый ответ, если никто не опубликует какое-то время. Меня беспокоит только то, что я не буду использовать это после обновления до Windows 10, но это другая тема, и вы ответили на этот вопрос. - person TonyG; 18.01.2016
comment
Согласно MSDN, V1 CP также работает в Windows 10. Однако с ним, похоже, есть некоторые ошибки. Для ваших целей может и подойдет. - person Vivek; 18.01.2016
comment
@TonyG, ты смог выполнить это требование? Можно ли получить пример этого? У меня точно такая же проблема. - person Franz Kiermaier; 25.01.2020
comment
@FranzKiermaier Я так и не придумал хорошего решения этой проблемы. Похоже, решение находится где-то между ожиданием запуска отложенных служб и мониторингом диска и ЦП на предмет затишья после запуска. См. этот другой поток по теме: stackoverflow.com/questions/10501853/ - person TonyG; 28.01.2020