使用 Java ProcessBuilder 从 TaskScheduler 启动的进程运行可见应用程序

问题描述 投票:0回答:1

在最新版本的 Windows 中通过任务计划程序启动任务时,如果任务是“无论用户是否登录都运行”,则该任务将不会交互运行 - 即它不会启动 UI。

仅供参考,这是根据 Microsoft 得出的,并已在此 SuperUser 问题 和此 StackOverflow 问题 中突出显示:

您可以指定任务应该运行,即使计划运行该任务的帐户在触发任务时未登录。为此,请选择标有“无论用户是否登录都运行”的单选按钮。如果选择此单选按钮,任务将不会交互运行。要使任务以交互方式运行,请选择“仅在用户登录时运行”单选按钮。

但是,我的问题是由此衍生的。

  • TaskScheduler 启动的任务是一个 Java 客户端应用程序, 可以指示运行进程 - 这些进程通过 ProcessBuilder 运行 在客户端应用程序中。因此,这个客户没有问题 应用程序被隐藏/不启动 UI - 事实上,没有 UI。

  • 但是,如果客户端应用程序通过 TaskScheduler 启动以“无论用户是否登录都运行”,则客户端应用程序中由 ProcessBuilder 启动的任何进程也无法交互运行/无法显示 UI 。这是一个问题,因为客户端启动的一些进程是 UI 应用程序。

我不确定为什么会出现这种情况,但实际上我正在尝试找出是否有解决方法 - 例如可以添加一些环境变量或属性来让(不可见)客户端启动可见进程。

有什么想法吗?

java scheduled-tasks windows-task-scheduler
1个回答
3
投票

我发现的解决方法是停止使用任务计划程序,创建一个脚本来启动我的应用程序,并在“开始”菜单 > 程序 > 启动文件夹中添加该脚本的快捷方式。

归功于HowToGeek上的这篇文章:

在 Windows 7 和早期版本的 Windows 上,“开始”菜单包含一个“启动”文件夹,可以让此操作变得简单。

此文件夹在 Windows 8、8.1 和 10 上不再那么容易访问,但仍然可以访问。要访问它,请按 Windows 键 + R,在“运行”对话框中输入“shell:startup”,然后按 Enter。

您添加到“shell:startup”文件夹的快捷方式仅在您使用用户帐户登录时才会启动。如果您希望有一个快捷方式在任何用户登录时自行启动,请在“运行”对话框中输入“shell:commonstartup”。

由于我希望我的应用程序在系统启动时启动,而不是用户登录时启动,因此我使用了“shell:commonstartup”链接。

以这种方式启动的应用程序 - 或者在我的例子中,由以这种方式启动的应用程序启动的应用程序 - 通过其 UI 可见和/或交互。

© www.soinside.com 2019 - 2024. All rights reserved.