windows 的后台服务不能发声的原因是什么

2018-10-01 18:09:54 +08:00
 helloiac

有一些自动备份、上传之类的工作,需要开机后开始运行。

在用一个很古老的 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

1094 次点击
所在节点    问与答
8 条回复
delectate
2018-10-01 18:43:21 +08:00
我认为可能是权限问题,或者自动选择的默认 playback 设备有问题。
34C
2018-10-01 19:54:32 +08:00
Windows 的权限问题,开发后台服务的时候,要播放音频得另辟蹊径
ysc3839
2018-10-01 20:35:59 +08:00
有可能是当前的 active session 才能播放声音?
geelaw
2018-10-02 05:40:21 +08:00
因为 services 运行在 session 0 里面,而屏幕上显示的永远不是 session 0。

简单的理解:如果你用快速用户切换功能在两个用户之间切换,在用户 A 的时候当然听不见用户 B 的程序的声音。
helloiac
2018-10-02 09:07:32 +08:00
@delectate 我终端里面直接执行成功是用当前登陆用户 a,后来把服务的登陆用户也设为当前用户 a,结果也是不行。有点 Windows 的“谜”之风格了。至于 playback 设备,在 services.msc 和 nssm 的设置项里,都没有发现相关设置。
helloiac
2018-10-02 09:12:09 +08:00
@ysc3839 @geelaw 没有 session 的概念,就是特定用户的一次登陆到注销的过程吧?勾选了“允许服务与桌面交互”也是不行。task scheduler 分配的定时任务为什么就没有这个问题呢,从 services.msc 的配置项看,它有两个依赖的系统组件:rpc 和 system events broker,会是这个的原因吗?
helloiac
2018-10-02 09:14:44 +08:00
这是 task scheduler 的依赖组件,应该是开发时加入的,不可修改:
![20181002091248.png]( https://i.loli.net/2018/10/02/5bb2c6414ac13.png)
donething
2018-10-02 10:25:11 +08:00
我用 JAVA 或 golang,播放音频时都需要程序保持运行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/494440

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX