Запуск видимых приложений с использованием Java ProcessBuilder из процесса, запущенного TaskScheduler

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

Для справки, это согласно Microsoft и выделено в этот вопрос суперпользователя и этот вопрос StackOverflow:

Вы можете указать, что задача должна выполняться, даже если учетная запись, под которой запланировано выполнение задачи, не вошла в систему при запуске задачи. Для этого выберите переключатель с надписью «Выполнить», независимо от того, вошел ли пользователь в систему или нет. Если этот переключатель выбран, задачи не будут выполняться в интерактивном режиме. Чтобы задача выполнялась в интерактивном режиме, выберите переключатель «Выполнять только при входе пользователя в систему».

Однако моя проблема является производной от этого.

  • Задача, запускаемая TaskScheduler, представляет собой клиентское приложение Java, которому можно дать указание запускать процессы — они запускаются через ProcessBuilder в клиентском приложении. Таким образом, это нормально, что это клиентское приложение скрыто / не запускает пользовательский интерфейс — действительно, пользовательского интерфейса нет.

  • Однако, если клиентское приложение запускается через TaskScheduler для «запуска независимо от того, вошел ли пользователь в систему или нет», как указано выше, то любые процессы, запускаемые ProcessBuilder в клиентском приложении, также не могут работать в интерактивном режиме / не могут отображать пользовательский интерфейс. Это проблема, так как некоторые процессы, запущенные клиентом, являются приложениями пользовательского интерфейса.

Я не уверен, почему это так, но на самом деле я пытаюсь выяснить, есть ли обходной путь - например. некоторые переменные среды или свойства, которые можно добавить, чтобы видимый процесс запускался (невидимым) клиентом.

есть идеи?


person amaidment    schedule 07.12.2016    source источник
comment
Запустите все эти приложения с пользовательским интерфейсом, создав новую задачу «Выполнить один раз и немедленно». Это должно сделать работу.   -  person glee8e    schedule 07.12.2016
comment
@ glee8e - не могли бы вы уточнить, что вы предлагаете? Вы кажетесь вполне уверенным в том, что рекомендуете жизнеспособное решение, но мне непонятно, что вы предлагаете и как это решает проблему.   -  person amaidment    schedule 07.12.2016
comment
Я ошибся: я считаю, что приложения с пользовательским интерфейсом не должны запускаться, если пользователь вышел из системы. Итак, я даю решение: создайте задачу, которая будет запускать процессы в интерактивном режиме и запускаться через несколько секунд. Но если вы хотите, чтобы приложения с пользовательским интерфейсом запускались, даже когда пользователь вышел из системы, ну, я понятия не имею об этом. Мои извинения.   -  person glee8e    schedule 09.12.2016


Ответы (1)


Итак, обходной путь, который я нашел, заключался в том, чтобы прекратить использование TaskScheduler, но создать сценарий для запуска моего приложения и добавить ярлык для этого сценария в меню «Пуск» > «Программы» > «Автозагрузка».

Кредит на эту статью на HowToGeek:

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

Эта папка уже не так легкодоступна в Windows 8, 8.1 и 10, но по-прежнему доступна. Чтобы получить к нему доступ, нажмите клавишу Windows + R, введите «shell: startup» в диалоговом окне «Выполнить» и нажмите Enter.

Ярлыки, которые вы добавляете в папку «shell:startup», будут запускаться только при входе в систему под своей учетной записью. Если вы хотите, чтобы ярлык запускался всякий раз, когда любой пользователь входит в систему, вместо этого введите «shell: common startup» в диалоговом окне «Выполнить».

Поскольку я хочу, чтобы мое приложение запускалось при запуске системы, а не при входе пользователя, я использовал ссылку «shell: общий запуск».

Приложения, запущенные таким образом, или, в моем случае, приложения, запущенные приложениями, запущенными таким образом, видны и/или интерактивны через свои пользовательские интерфейсы.

person amaidment    schedule 03.01.2017