使用Microsoft提供的NTSVC.OCX控件,VB也可以将你的应用程序做成Service服务。

原创 2004年12月30日 10:17:00

NTSVC.OCX控件,可以在网上搜索得到,在这里我就只介绍一下用法。

使用这个控件注册成Service服务的时候有个需要注意的,如果我们不使用/i或者/u参数,那么建立的Service服务会因为超时而不能启动。所以在注册Service服务的时候,必须带/i或/u参数。

1. 引用控件
选择“工程”-“引用”-“Microsoft NT Service Control”,如果没有,请先将NTSVC.OCX拷贝到%System32%/下,然后再引用对话框中选择浏览,添加该控件。

2. 主要代码
Private Sub Form_Load()
    On Error GoTo ServiceError
    '安装Service服务
    If Command = "/i" Then
        NTService.Interactive = True
        If NTService.Install Then
            NTService.SaveSetting "Parameters", "TimerInterval", "300"
            MsgBox NTService.DisplayName & ": installed successfully"
        Else
            MsgBox NTService.DisplayName & ": failed to install"
        End If
        End
    '删除Service服务
    ElseIf Command = "/u" Then
        If NTService.Uninstall Then
            MsgBox NTService.DisplayName & ": uninstalled successfully"
        Else
            MsgBox NTService.DisplayName & ": failed to uninstall"
        End If
        End
    End If
    Timer.Interval = CInt(NTService.GetSetting("Parameters", "TimerInterval", "300"))
    NTService.ControlsAccepted = svcCtrlPauseContinue
    NTService.StartService
    Exit Sub
ServiceError:
    Call NTService.LogEvent(svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description)
End Sub

'Unload the Service
Private Sub Form_Unload(Cancel As Integer)
    If Not StopService Then
        If MsgBox("Are you sure you want to unload the service?..." & vbCrLf & "the service will be stopped", vbQuestion + vbYesNo, "Stop Service") = vbYes Then
            NTService.StopService
            Label1.Caption = "Stopping"
            Cancel = True
        Else
            Cancel = True
        End If
    End If
End Sub

Private Sub NTService_Continue(Success As Boolean)
    On Error GoTo ServiceError
    Timer.Enabled = True
    Success = True
    NTService.LogEvent svcEventInformation, svcMessageInfo, "Service continued"
    Exit Sub
ServiceError:
    NTService.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService_Control(ByVal mEvent As Long)
    On Error GoTo ServiceError
    Exit Sub
ServiceError:
    NTService.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService_Pause(Success As Boolean)
    On Error GoTo ServiceError
    Timer.Enabled = False
    NTService.LogEvent svcEventError, svcMessageError, "Service paused"
    Success = True
    Exit Sub
ServiceError:
    NTService.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService_Start(Success As Boolean)
    On Error GoTo ServiceError
    Success = True
    Exit Sub
ServiceError:
    NTService.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService_Stop()
    On Error GoTo ServiceError
    StopService = True
    Unload Me
ServiceError:
    NTService.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

3. 如果是有其他的控件触发Service服务的Install和Uninstall,可以采用Shell或者WinExec来处理。
先声明函数
Public Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
Public Const SW_HIDE = 0
使用,比如用CheckBox触发
a.安装
    Call WinExec(App.EXEName & " /i", SW_HIDE)

b.卸载
    Call WinExec(App.EXEName & " /u", SW_HIDE)

如何利用VB编写NT服务程序

一、NT服务程序    所谓NT服务,实际上就是一个可以在系统启动时自动在一定身份下启动的伴随系统长时间存在的进程。象FTP server、HTTP server、脱机打印等都是采用NT服务的形式提供...
  • shanhe
  • shanhe
  • 2005年04月22日 01:39
  • 4594

NT服务启动Windows程序 -- NTService

从NT服务启动Windows程序通常,NT服务是控制台应用程序,它没有消息循环。不必等到用户登陆电脑,NT服务便能启动,并且在用户登出之后,它也不会停止运行。然而,许多现存的ActiveX控件很难,有...
  • jackychu
  • jackychu
  • 2008年10月08日 15:47
  • 4018

WINDOWS NT服务的创建方法

以为以VC6.0开发工具为例,  .NET C++是一样的。可以使用控制台, WIN32,  ATL (.NET 的ATL用的模板,而VC6.0不是)。程序框架主要由两部分板成, 一个服务主函数(Se...
  • humanNew
  • humanNew
  • 2007年04月02日 17:32
  • 862

Microsoft Windows® 2000的加密服务提供程序(CSP, Cryptographic Service Provider)

CSP是真正实行加密的独立模块,他既可以由软件实现也可以由硬件实现。但是他必须符合CryptoAPI接口的规范。每个CSP都有一个名字和一个类型。每个CSP的名字是唯一的,这样便于CryptoAPI找...
  • msonchina
  • msonchina
  • 2007年10月10日 21:22
  • 4510

如何将Java项目做成windows服务

部分内容转载于--作者:kevinlifeng java project  我说的是main方法作为程序入口的java工程 制作方案: 1,将Java项目打包成可执行jar文件,如果你用的是myecl...
  • xs_00
  • xs_00
  • 2016年03月07日 12:20
  • 1712

VB6.0创建系统服务程序精品源码,带描述

  • 2012年08月16日 22:43
  • 21KB
  • 下载

windows服务和应用程序

在运行中输入(services.msc)回车,会看到本地服务的框线,tab一次就是列表: 01.显示名称:alerter ◎进程名称:svchost.exe-k LocalService ...
  • caiqi1123
  • caiqi1123
  • 2011年11月16日 10:45
  • 688

angular4 服务依赖注入的三种方法

假设有服务authservice,现在要把它注入到我们的组件中。有下列三种方法。 方法一:最简单直接,直接生产一个该服务的实例对象。 import { Component, OnInit ...
  • m0_37222746
  • m0_37222746
  • 2017年09月28日 22:30
  • 1166

如何实现在Linux下创建服务程序

Linux系统能提供强大可靠的网络服务,并有管理程序对服务进行管理。例如我们熟悉的Web、FTP和电子邮件等,它们既可以单独运行,也可以被守护进程inetd调用,而且运行得都非常好。但我们不能仅停留在...
  • boy8239
  • boy8239
  • 2007年10月07日 20:23
  • 1805

NT服务启动Windows程序 -- NTService

从NT服务启动Windows程序通常,NT服务是控制台应用程序,它没有消息循环。不必等到用户登陆电脑,NT服务便能启动,并且在用户登出之后,它也不会停止运行。然而,许多现存的ActiveX控件很难,有...
  • jackychu
  • jackychu
  • 2008年10月08日 15:47
  • 4018
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Microsoft提供的NTSVC.OCX控件,VB也可以将你的应用程序做成Service服务。
举报原因:
原因补充:

(最多只允许输入30个字)