V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
helloiac
V2EX  ›  问与答

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

  •  
  •   helloiac · 2018-10-01 18:09:54 +08:00 · 1041 次点击
    这是一个创建于 2041 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    简单的理解:如果你用快速用户切换功能在两个用户之间切换,在用户 A 的时候当然听不见用户 B 的程序的声音。
    helloiac
        5
    helloiac  
    OP
       2018-10-02 09:07:32 +08:00
    @delectate 我终端里面直接执行成功是用当前登陆用户 a,后来把服务的登陆用户也设为当前用户 a,结果也是不行。有点 Windows 的“谜”之风格了。至于 playback 设备,在 services.msc 和 nssm 的设置项里,都没有发现相关设置。
    helloiac
        6
    helloiac  
    OP
       2018-10-02 09:12:09 +08:00
    @ysc3839 @geelaw 没有 session 的概念,就是特定用户的一次登陆到注销的过程吧?勾选了“允许服务与桌面交互”也是不行。task scheduler 分配的定时任务为什么就没有这个问题呢,从 services.msc 的配置项看,它有两个依赖的系统组件:rpc 和 system events broker,会是这个的原因吗?
    helloiac
        7
    helloiac  
    OP
       2018-10-02 09:14:44 +08:00
    这是 task scheduler 的依赖组件,应该是开发时加入的,不可修改:
    ![20181002091248.png]( https://i.loli.net/2018/10/02/5bb2c6414ac13.png)
    donething
        8
    donething  
       2018-10-02 10:25:11 +08:00 via Android
    我用 JAVA 或 golang,播放音频时都需要程序保持运行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1063 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:07 · PVG 02:07 · LAX 11:07 · JFK 14:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.