PB开发Windows服务方案

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项目下载

相关推荐

  1. nginx服务window开机自启动

    2023-12-20 09:16:04       65 阅读
  2. Windows系统中开启SSH服务

    2023-12-20 09:16:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-20 09:16:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-20 09:16:04       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-20 09:16:04       87 阅读
  4. Python语言-面向对象

    2023-12-20 09:16:04       96 阅读

热门阅读

  1. 【P2PTransportChannel 】connetion 切换1

    2023-12-20 09:16:04       40 阅读
  2. c# 移除数据中 Deleted 为1的数据

    2023-12-20 09:16:04       58 阅读
  3. mysql_binlog格式分析,快速了解binlog日志格式

    2023-12-20 09:16:04       50 阅读
  4. MYSQL-简单的联表查询示例

    2023-12-20 09:16:04       49 阅读
  5. Tomcat

    2023-12-20 09:16:04       63 阅读
  6. 2312llvm,02前端

    2023-12-20 09:16:04       55 阅读
  7. SpringMVC---获取参数

    2023-12-20 09:16:04       56 阅读
  8. 51单片机基于时间片轮转的简单rtos

    2023-12-20 09:16:04       57 阅读
  9. C/C++ fmt 格式化字符串实现(轻量)

    2023-12-20 09:16:04       59 阅读