YStudio Y++

Windows服务类

Y++ / YStudio 开发文档 · 一点滴

类对象支持库。路径:支持库 → 扩展类库 → Windows服务类。

类型名写「Windows服务类」。声明时自动创建。

安装/启停 Windows 服务,以及本进程由 SCM 拉起时进入服务循环。开通票位后才能编译;发行程序不再验票。

能力包:plugins/supportlib.winservice/。安装/卸载/改配置通常需要管理员权限。

作用

把本程序(或指定 exe)注册成 Windows 服务:开机自启、无界面后台跑、用「服务」控制台启停。
安装 / 启动 等不用带参:先 置名称 / 置显示名 / 置可执行文件… 写到对象上,再调用无参方法(状态都在实例里)。

安装与启停

Windows服务类 服
如果 (!服.是否管理员()) {
    输出("请以管理员运行")
    返回
}
服.置名称("YppDemoSvc")          // 必填:SCM 内部名
服.置显示名("Y++ 演示服务")      // 服务管理器里看到的名字
服.置描述("示例后台服务")
服.置启动类型(0)                 // 0自动 1手动 2禁用
服.置可执行文件("")              // 空=本程序路径
服.置参数("--service")           // 可选:追加命令行
服.置帐户("")                    // 空=LocalSystem
如果 (!服.安装()) {
    输出(服.取错误())
} 否则 {
    服.启动()
    服.等待状态(4, 15000)        // 等到运行中
}

重启 / 暂停 / 配置

服.置名称("YppDemoSvc")
服.重启()                       // 停→等停→启→等运行
服.暂停服务()                   // 须服务支持 Pause
服.继续服务()

服.读取配置()                   // 从 SCM 填回本对象
输出(服.取显示名() + " / " + 服.取可执行文件())
服.置启动类型(1)                // 改成手动
服.改配置()
服.写事件日志("配置已更新")

本进程作为服务运行

须先安装,且映像指向本 exe。由服务控制管理器启动时:

Windows服务类 服
服.置名称("YppDemoSvc")

函数 后台工作 () {
    循环 (!服.是否请求停止()) {
        // 做周期性工作
        延时(1000)
    }
}

函数 程序入口 () {
    线程类 线
    线.启动(&后台工作)
    如果 (!服.进入服务()) {
        输出(服.取错误())
        载入(主窗口)
    }
}

进入服务 在交互运行下会失败(须由 SCM 启动)。工作线程在进入前启动,轮询 是否请求停止。本实现接受 Pause/Continue 控制码。

取状态

值 含义
0 不存在
1 已停
2 启动中
3 停止中
4 运行中
5 暂停中
6 已暂停
7 继续中

命令摘要

方法 说明
置/取名称 · 置/取显示名 · 置描述 · 置/取可执行文件 · 置/取参数 · 置/取启动类型 配置
置帐户 / 置帐户密码 / 取帐户 运行帐户(空=LocalSystem)
安装 / 卸载 / 启动 / 停止 / 重启 管理
暂停服务 / 继续服务 / 等待状态 控制与等待
读取配置 / 改配置 SCM 读写
是否已安装 / 是否运行 / 取状态 / 是否管理员 查询
写事件日志 应用程序日志
进入服务 / 是否请求停止 / 报告运行中 本进程服务
取错误 失败原因