有一些自动备份、上传之类的工作,需要开机后开始运行。
在用一个很古老的 pycron 软件实现 windows 上的 cron,因为他支持 linux 的 cron 风格的配置文件。他的原理是安装了一个 windows 服务,每隔一分钟读取配置文件,决定执行或者跳过某条任务。
最近有个问题,就是我在 python 脚本加入了函数执行失败时 tts 发声提醒的功能,结果他虽然不报错,但并不发声。tts 的 module 执行 saytofile 没问题,但 say 就是不发声。而直接执行此脚本,或者通过 windows 的 tasker 安装为服务是没有此问题的。
pycron 这软件早就不更新了,所以自己尝试找了下原因。我仔细看了 windows 服务的配置属性,试着将用户角色改为当前用户,但不起作用。
所以,请教这个后台服务不能发声,是第三方安装的服务的普遍问题,还是 pycron 这个软件的 bug ?
pycron 软件官网已经去除了链接了,这里有简单介绍: http://blog.51cto.com/wzp85/381807
1
delectate 2018-10-01 18:43:21 +08:00
我认为可能是权限问题,或者自动选择的默认 playback 设备有问题。
|
2
34C 2018-10-01 19:54:32 +08:00 via iPhone
Windows 的权限问题,开发后台服务的时候,要播放音频得另辟蹊径
|
3
ysc3839 2018-10-01 20:35:59 +08:00 via Android
有可能是当前的 active session 才能播放声音?
|
4
geelaw 2018-10-02 05:40:21 +08:00 via iPhone
因为 services 运行在 session 0 里面,而屏幕上显示的永远不是 session 0。
简单的理解:如果你用快速用户切换功能在两个用户之间切换,在用户 A 的时候当然听不见用户 B 的程序的声音。 |
5
helloiac OP @delectate 我终端里面直接执行成功是用当前登陆用户 a,后来把服务的登陆用户也设为当前用户 a,结果也是不行。有点 Windows 的“谜”之风格了。至于 playback 设备,在 services.msc 和 nssm 的设置项里,都没有发现相关设置。
|
6
helloiac OP |
7
helloiac OP 这是 task scheduler 的依赖组件,应该是开发时加入的,不可修改:
![20181002091248.png]( https://i.loli.net/2018/10/02/5bb2c6414ac13.png) |
8
donething 2018-10-02 10:25:11 +08:00 via Android
我用 JAVA 或 golang,播放音频时都需要程序保持运行。
|