解决方案:
先说目前可行的解决方案,通过几轮验证和微软社区客服回复,因为目前选择---‘不管用户是否登录都要运行’的任务计划只能在system系统账户运行,且因为Session 0隔离原因,system系统账户的任务无法与桌面交互以获取桌面图片,所以使用图像识别技术来实现自动化控制的Airtest测试脚本无法识别图像以进行,只能回退选择 ‘只在用户登录时运行’ + ‘使用最高权限运行’
前情提要:
我想试着定时某个时间利用任务计划程序执行Airtest脚本,因为可以用命令行执行所以编了个.bat脚本给任务计划程序试图通过定时执行.bat启动Airtest实现目的 |ू・ω・` )
因为想着定时执行可能当时电脑不一定在登录使用,所以设置‘不管用户是否登录都要运行’,但发现在设置不管用户是否登录那里,无论选不储存密码还是存密码,加最高权限都没法运行。且任务计划程序的日志报错为0xC000013A错误
(测试发现只有选‘只在用户登录时运行’ + 当时我正在使用处于登录状态,才能正常到点执行 T_T\")
就在登录状态手动点任务运行都没见黑框框弹出来,也没见执行效果,用显示所有正在执行的任务查看发现任务是运行了但是21秒之后自动消失
查看任务历史记录里的记录和正常启动后手动点停止的记录一样---附情况视频链接
Windows 11 系统任务计划无法定时执行.bat脚本问题_哔哩哔哩_bilibili
于是向微软提问:
为什么在任务计划程序中设置任务的安全选项里,只要选择-不管用户是否登录都要运行,就无法正常执行任务,如果选择的是只在用户登录时运行就ok - Microsoft Community
微软社区客服回复1
感谢您的反馈,了解到您的问题,从您的描述看您的问题和任务计划程序有关,这种情况比较常见,以下是一些可能的原因:
权限问题:当选择"不管用户是否登录都要运行"时,任务会在系统账户下运行,而不是您的用户账户。这可能导致权限不足,无法访问某些资源或执行某些操作。
环境变量:系统账户的环境变量与用户账户不同,可能导致某些依赖特定环境变量的脚本或程序无法正常运行。
交互性:"不管用户是否登录都要运行"的任务无法与桌面交互,这可能导致一些需要用户界面的程序无法正常运行。
超时设置:任务在21秒后自动消失可能是因为任务计划程序认为任务已完成或遇到了某些问题。
网络资源:如果任务需要访问网络资源,在系统账户下可能无法正确连接。
以下是进一步的建议:
检查脚本或程序:确保您的脚本或程序不依赖于特定用户环境。使用完整的路径引用文件和程序
日志记录:在脚本或程序中添加详细的日志记录,以便追踪执行过程中的问题。
延长超时时间:在任务的设置中,尝试增加允许任务运行的最长时间。
检查事件查看器:查看Windows事件查看器中的应用程序和系统日志,寻找与任务执行相关的错误信息。
使用PowerShell:如果是运行脚本,考虑使用PowerShell脚本,它通常在系统级别运行时更可靠。
情况排查:
Airtest日志检查
![正常运行成功的日志](https://i-blog.csdnimg.cn/direct/89c1a5ecc0f1409680eba8e11787e6af.png)
![](https://i-blog.csdnimg.cn/direct/d2105b6fcaaf48bfb4c827f6acf5ab94.png)
日志对比后发现通过任务计划程序定时执行的脚本无法获取桌面图像,符合微软客服回复的
交互性:"不管用户是否登录都要运行"的任务无法与桌面交互,这可能导致一些需要用户界面的程序无法正常运行。
并且原因可能是系统账户和用户账户的权限不同
权限问题:当选择"不管用户是否登录都要运行"时,任务会在系统账户下运行,而不是您的用户账户
环境变量经过检查Airtest没有在用户环境变量新增路径,也没有调用全局变量路径的需求
21s超时消失是由于程序执行但没有识别桌面自动退出的,网络也并没有限制脚本运行
于是接下来往system系统账户执行.bat无法与桌面交互方向搜寻...
system系统账户执行.bat无法与桌面交互---win7后Session 0隔离
很轻易地翻到了09年就已经是满天转载的一篇文章Windows服务“允许服务与桌面交互”的使用和修改方法 _服务标记为交互服务-CSDN博客
但发现这方法早在win7/Vista年代之后就失效了WINDOWS服务启动应用程序看不到界面-CSDN社区
而且在尝试过程发现我的.bat运行是不会出现在任务管理器,平时也不在服务里。那么就得先注册服务再试“允许服务与桌面交互”功能这一方法
但。。。也许用.bat注册成服务需要一些技巧,于是先按下不表
一般都是用exe注册成服务的,现在寻到可能的.bat注册成服务方法windows bat脚本注册成服务_windows将bat变成服务-CSDN博客
然后了解到微软在win7/Vista及以后使用了Session 0隔离处理方式,也就是从那时起服务“允许与桌面交互”功能就成了摆设解决vista和win10在windows服务中交互桌面权限问题:穿透Session 0 隔离_win10 允许服务与桌面交互 为什么不起作用-CSDN博客
但是根据文章中Session 0隔离的是服务与桌面交互,这一功能受用的人群多是想要自己的应用在运行时弹出报错窗口的,这与我脚本需要获取桌面图像一些许偏差,于是决定先再询问微软客服穿透Session 0隔离后是否能帮助获取桌面图像后再行穿透https://answers.microsoft.com/zh-hans/windows/forum/windows_11-wintop_account/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E4%BB%BB/9d2aaa4d-44af-4236-97f8-16232a46cc97
于是目前只能先回退选择 ‘只在用户登录时运行’ + ‘使用最高权限运行’,加电脑息屏时间延长至脚本运行时(有电费和烧屏风险o(╥﹏╥)o)
加试验证Session 0隔离导致脚本运行环境不同于Administrator等用户
通过验证一个打印输出的脚本同样使用相同的定时配置后,发现这个打印输出的脚本同样不是显示在用户桌面的,符合猜测
以下附图仅为打印输出的脚本的演示,手动运行有弹窗,定时后没弹窗的验证
![](https://i-blog.csdnimg.cn/direct/f2973a9e1a72456cb35356561162a46d.png)
即可能说明定时任务不在用户环境执行,在Session 0中执行于Session 1等分离开了
今儿个为了这定时调了三天,期间两天还要准备中元节杀鸭渡祖,累了累了,还得抓紧时间提升自己,不然就得入住畅享豪宅了
再蹲一手微软回复