У меня есть программа, которая запускается при запуске системы с помощью планировщика задач на Windows Server 2012. Программа должна запуститься, даже если компьютер перезагрузится автоматически.
Администратор - это учетная запись, используемая для запуска программы, опция «Запускать независимо от того, вошел ли пользователь в систему или нет» отмечена для задачи.
Проблема в том, что когда кто-то, наконец, входит в систему как администратор с помощью подключения к удаленному рабочему столу, интерфейс (окно программы) скрывается.
Насколько я понимаю, с помощью планировщика задач решить эту проблему невозможно.
Как я могу это решить?
Это должна быть довольно распространенная проблема, но я ничего не могу найти в сети. Я очень удивлен, что Microsoft допускает такое ограничение в своем планировщике. Могу ли я создать сценарий VBScript или что-то такое, что запускается при запуске и запускает программу, которая затем будет видна, когда пользователь действительно войдет в систему?
Другие идеи?
(Я не хочу создавать отдельную программу только с графическим интерфейсом, которая, кстати, подключается к исходной программе. Я бы также предпочел, если мне не нужно завершать уже запущенную программу при входе пользователя в систему, а затем запускать это снова.)
Разобрался как это сделать сам. Это своего рода обходной путь, но я ожидал этого.
Стоп! Пока не передергивайся. Читай дальше...
Запустите его, настройте так, чтобы администратор входил в систему автоматически.
Создайте задачу в Планировщике заданий. Установите его для запуска, только когда пользователь (администратор) вошел в систему. Триггер «при входе в систему» и укажите, что это только при входе администратора.
Создайте вторую задачу. Запускать только когда пользователь вошел в систему, запускать при входе администратора. Действие должно быть «запустить программу», а программа - «C: \ Windows \ System32 \ rundll32.exe» с полем аргумента, установленным на «user32.dll, LockWorkStation».
Что происходит теперь, если вы перезагружаете компьютер, так это то, что администратор автоматически входит в систему, запускается программа, которую вы хотите запустить, и рабочая станция блокируется. Если я вхожу в систему через подключение к удаленному рабочему столу, я вижу окно программы и использую графический интерфейс. Я могу заблокировать / разблокировать компьютер без проблем и отключать / повторно подключаться по своему усмотрению. Нет проблем, если я пойду на сервер и зарегистрируюсь на реальной рабочей станции. Поскольку администратор уже вошел в систему, задача не будет запускаться снова (она не создает бесконечного цикла входа в систему, из которого вы не можете выйти).
Просто как тот. Допустим, есть период времени в одну секунду до того, как компьютер будет заблокирован после автоматического входа в систему, и я предполагаю, что профессиональный хакер с физическим доступом к компьютеру может сделать что-то подлое в течение этого временного окна, но в моем случае я могу упустить этот риск для безопасности. До тех пор, пока я не впущу в свой дом профессиональных хакеров и не покажу им компьютер, система должна быть относительно безопасной. Прежде всего, компьютер, на котором требуется защита суперсохранилища, не представляет особой ценности, поэтому я вполне доволен этим решением.
У меня есть программа, которая запускается при запуске системы с помощью планировщика задач в Windows Server 2012. Программа должна запускаться, даже если компьютер перезагружается автоматически.
Тогда почему бы вам не сделать это системной службой, как это определено в спецификациях Windows?
Как я могу это решить?
Ты не можешь. Фоновые программы не должны взаимодействовать с пользовательским интерфейсом. Или: пользовательский интерфейс должен запускать собственную программу, которая затем подключается к службе. Пользовательский интерфейс, работающий в пользовательском пространстве вошедшего в систему пользователя, выполняет презентацию, служба Windows выполняет обработку. Так модель рассчитана примерно на 15 лет.
Я очень удивлен, что Microsoft допускает такое ограничение в своем планировщике.
Я более удивлен, что вы не удосужились спросить, почему.
Есть несколько проблем:
Я не хочу создавать отдельную программу только с графическим интерфейсом, которая, кстати, подключается к исходной программе.
На данный момент ни меня, ни Microsoft не волнует, чем вы хотите заниматься. Существует устоявшаяся и поддерживаемая модель для привязки фоновой обработки к пользовательскому интерфейсу, вошедшему в систему - использовать ее или нет. Но если нет, не говорите о проблемах безопасности, которые вы поднимаете.
Все дело в Session
что ваша программа работает. Если никто не вошел в систему, нет интерактивного сеанса для отображения, я считаю, что он работает под Session 0
, у которого странный интерфейс, который не похож на другие.
Теперь, если ваша программа определяет, когда explorer.exe
запускается (или какой-либо другой способ обнаружения входа пользователя) и волшебным образом трансформируется или порождает какой-либо дочерний процесс на этом новом идентификаторе сеанса, тогда любой, кто входит в систему, с радостью увидит, что вы делаете.