众所周知,在最新版本的Windows中通过TaskScheduler启动任务时,如果任务是"无论用户是否登录都运行,那么任务将无法以交互方式运行 - 即它不会启动UI。
供参考,这取决于Microsoft,并已在此SuperUser question及此StackOverflow question中突出显示:
即使在触发任务时未登录任务计划运行的帐户,您也可以指定任务应该运行。为此,请选择标记为“运行用户是否已登录”的单选按钮。如果选中此单选按钮,则任务将不会以交互方式运行。要以交互方式运行任务,请选择“仅在用户登录时单击运行”单选按钮。
然而,我的问题是这个的衍生物。
TaskScheduler启动的任务是一个Java客户端应用程序 可以指示运行进程 - 这些进程通过ProcessBuilder运行 在客户端应用程序中。因此,这个客户端是可以的 应用程序隐藏/无法启动UI - 实际上,没有UI。
但是,如果客户端应用程序是通过TaskScheduler启动的,那么“运行用户是否已登录”'如上所述,然后客户端应用程序中由ProcessBuilder启动的任何进程也无法以交互方式运行/无法显示UI。这是一个问题,因为客户端启动的一些进程是UI应用程序。
我不确定为什么会出现这种情况,但是如果有解决办法的话,我真的想弄清楚 - 例如一些环境变量或属性可以添加以获得由(不可见)客户端启动的可见进程。
有什么想法吗?
答案 0 :(得分:0)
因此,我找到的解决方法是停止使用TaskScheduler,但创建一个脚本来启动我的应用程序并在“开始”菜单中添加了该脚本的快捷方式>节目>启动文件夹。
相信HowToGeek上的这篇文章:
在Windows 7及更早版本的Windows上,“开始”菜单包含一个“启动”文件夹,以简化操作。
此文件夹在Windows 8,8.1和10上不再容易访问,但仍可访问。要访问它,请按Windows键+ R,在“运行”对话框中键入“shell:startup”,然后按Enter键。
您添加到“shell:startup”文件夹的快捷方式只会在您使用您的用户帐户登录时启动。如果您想要在任何用户登录时启动自己的快捷方式,请在“运行”对话框中键入“shell:common startup”。
由于我希望我的应用程序在系统启动时启动,而不是用户登录,因此我使用了“shell:common startup”链接。
以这种方式启动的应用程序 - 或者在我的情况下,以这种方式启动的应用程序启动的应用程序 - 通过其UI可见和/或交互。