类对象支持库。路径:支持库 → 扩展类库 → 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 读写 |
是否已安装 / 是否运行 / 取状态 / 是否管理员 |
查询 |
写事件日志 |
应用程序日志 |
进入服务 / 是否请求停止 / 报告运行中 |
本进程服务 |
取错误 |
失败原因 |