4、添加控制服务的代码。 尽管服务的连续线程等特性是依赖Timer实现的,但是服务的控制却是有SCM接口向每一个服务发出的,表现在VB服务程序中为NT服务控件捕获到相关的事件发生,我们就应当在这些事件中根据具体的情况响应,决定能不能、如何控制服务逻辑。当然,具体的逻辑在Timer事件中表现,但是通过改变NT服务控件和Timer控件均支持的全局变量,可以实现控制服务的逻辑实现。具体代码演示: Private Sub NTService1_Control(ByVal EventID As Long) On Error GoTo Err_Control ‘在此加入一些自己的处理逻辑,当然也可以如本例一样空缺 Err_Control: Call NTService1.LogEvent(svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description) ‘纪录 End Sub Private Sub NTService1_Pause(Success As Boolean) On Error GoTo Err_Pause Timer1.Enabled = False ‘禁止Timer事件,因此也停止了服务的发生 Call NTService1.LogEvent(svcEventError, svcMessageError, "Service paused") Success = True ‘返回给SCM命令发出者,表示服务成功停止 Err_Pause: Call NTService1.LogEvent(svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description) End Sub Private Sub NTService1_Start(Success As Boolean) On Error GoTo Err_Start Success = True Timer1.Enabled = True ‘允许服务逻辑进行 Err_Start: Call NTService1.LogEvent(svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description) End Sub Private Sub NTService1_Stop() On Error GoTo Err_Stop Unload Me ‘撤除Form,自然Timer也不存在,服务逻辑停止了 Err_Stop: Call NTService1.LogEvent(svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description) End Sub 5、编写服务逻辑。 具体就是在Timer事件中,根据约定写一些服务细节。本例中就是发出Been,但是考虑到对SCM命令的响应,所以需要编码为: On Error GoTo Err_Timer Beep ‘此处即具体的服务细节 Err_Timer: Call NTService1.LogEvent(svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description) End Sub 6、编译安装、测试 |