1、项目简介
PB作为一门客户端开发语言,虽然官方并未提供标准的Windows服务开发方案,但使用PB开发Windows服务并非无法实现。自PB9开始,PB提供了PBNI接口,PB与C++可以通过这个接口互相调用,而C++可以开发Windows服务。因此只要使用C++将Windows服务的主体结构固化下来,在适当的时候通过PBNI接口启动PB进程、调用PB编写的处理过程,就能够实现以PB语言开发Windows服务。PBExtSVC就是这样一个实现PB语言以固定模板快速开发Windows服务的工具。
PBExtSVC项目的结构如下图:
2、项目配置
PBExtSVC.ini为项目配置文件,有如下基础配置项:
按这个配置文件创建的服务如下图:
3、快速入门
3.1、服务创建
以管理员身份运行CMD窗口,进入项目目录,运行以下代码即可创建服务:
PBExtSVC.exe /install
执行效果如图:
3.2、服务卸载
同样以管理员身份运行CMD窗口,进入项目目录,运行以下代码卸载服务:
PBExtSVC.exe /uninstall
3.3、服务处理过程PB项目编写
按3.1方式创建服务后,如果直接启动服务会报错,因为还没有提供编写服务处理过程的PB库。
首先创建一个PB项目,添加pbsvc.pbl,新建一个PBSVC类的子类:
PBSVC类的属性及事件的具体作用如下:
属性or事件 | 名称 | 作用 |
---|---|---|
属性 | service_run_interval | 服务每次执行的事件间隔,单位毫秒 |
事件 | service_start | 服务启动时触发执行的代码 |
事件 | service_run | 服务每次执行的代码 |
事件 | service_stop | 服务停止时触发执行的代码 |
接下来编写一个这样的服务,服务启动时打开一个文件并写入打开时间,每隔3秒写入一次当前执行的时间,服务停止时写入停止时间后关闭这个文件。
添加实例变量:
PRIVATE:
int iFile
service_start事件添加代码:
iFile = FileOpen('D:\Temp\PBExtSVCTest\test.log', textmode!, write!, shared!)
FileWriteEx(iFile, string(now()) + ' PBSVC start ~r~n')
service_run事件添加代码:
FileWriteEx(iFile, string(now()) + ' PBSVC run ~r~n')
service_stop事件添加代码:
FileWriteEx(iFile, string(now()) + ' PBSVC stop ~r~n')
FileClose(iFile)
设置属性service_run_interval为3000
最后Deploy项目,将生成的pbd文件拷贝到PB库目录PBSVCLib中(无需拷贝生成的exe文件)
3.4、服务执行
PBExtSVC.ini中配置好PB项目名、类名和PBVM地址后,即可启动服务测试。在Windows服务管理器中启动服务,执行一段时间后停止服务。可以看到,D:\Temp\PBExtSVCTest目录下生成了test.log文件,写入的内容如下图:
4、项目获取
PBExtSVC项目下载