Как запустить что-то после полного входа в Windows? - PullRequest
3 голосов
/ 02 апреля 2012

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

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

Запуск службы происходит автоматически, поэтому он запускается автоматически после каждой перезагрузки.Если он попытается запустить какую-либо программу (которая требует доступа к пользовательскому интерфейсу) сразу после запуска службы, эта программа может завершиться сбоем - возможно, из-за того, что процесс автолога все еще выполняется, рабочий стол еще не создан и т. Д.Вопрос заключается в следующем: если служба запускается «рано», как она может ожидать полной инициализации интерактивного сеанса (кроме ожидания некоторого произвольного времени, которое не является оптимальным)?

Или может ли служба бытьначал "поздно"?Есть ли раздел реестра, или папка, или что-то еще, что я могу использовать, чтобы отложить запуск службы до того момента, когда оболочка будет готова и безопасно запускать приложения пользовательского интерфейса?

1 Ответ

2 голосов
/ 02 апреля 2012

Два самых простых способа «выполнить некоторый код при входе пользователя в систему» ​​- это написать файл .bat, и либо:

1) Поместите файл .bat в папку автозагрузки <= Примечание. В Windows 7 / Vista есть новое место для папки «Автозагрузка» </p>

... или ...

2) Создайте новую задачу, которая вызывает файл .bat при входе в систему

I вариант «2)» обеспечивает более точное управление. Он также позволяет файлу .bat «Запускать от имени администратора», если необходимо.

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

Пример:

@rem Waits 5 seconds before continuing
ping 1.1.1.1 -n 1 -w 5000 > nul
...