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