微软提供一个好像叫ntsvc.ocx的控件,
你可以查找以前的帖子,有讲的,
用这个控件作的服务都不是很稳定

解决方案 »

  1.   

    一个带演示源码的控件,可以将你的程序变为Windows NT的服务器程序。
    http://www.applevb.com/sourcecode/nt_server.zip
    不过微软建议不要用VB做服务器程序。
      

  2.   

    我為公司作了一個檢測NT服務的程序﹐但也要執行成一個服務﹐就是用的Ntsvc.ocx﹐去年就發布了﹐用戶感覺的可以﹐沒有問題
      

  3.   

    具体API應用舉例可到www.mvps.org/vbnet去查找
      

  4.   

    thorkhan
    哪个控件在什么地方!我找不到这个控件,Ntsvc.ocx
    能大体告诉我怎么开发吗,我没有做过这种东西!手头的资料也没有例子!: technofantasy(www.applevb.com) 
    你提供的连接我找不到nt_server.zip这个文件
      

  5.   

    sorry,是:
    http://www.applevb.com/sourcecode/nt_service.zip
      

  6.   

    對啊﹐去MSDN下載﹐有例子﹐不過妳這個服務做完之后還要向NT注冊妳的服務具体例子也要的MSDN去找﹐下面的是檢測服務存不存在及注冊服務和刪除服務的API聲明Private Const SERVICE_WIN32_OWN_PROCESS = &H10&
    Private Const SERVICE_WIN32_SHARE_PROCESS = &H20&
    Private Const SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS + SERVICE_WIN32_SHARE_PROCESSPrivate Const SC_MANAGER_CONNECT = &H1
    Private Const SC_MANAGER_CREATE_SERVICE = &H2
    Private Const SC_MANAGER_ENUMERATE_SERVICE = &H4
    Private Const SC_MANAGER_LOCK = &H8
    Private Const SC_MANAGER_QUERY_LOCK_STATUS = &H10
    Private Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Private Const SERVICE_QUERY_CONFIG = &H1
    Private Const SERVICE_CHANGE_CONFIG = &H2
    Private Const SERVICE_QUERY_STATUS = &H4
    Private Const SERVICE_ENUMERATE_DEPENDENTS = &H8
    Private Const SERVICE_START = &H10
    Private Const SERVICE_STOP = &H20
    Private Const SERVICE_PAUSE_CONTINUE = &H40
    Private Const SERVICE_INTERROGATE = &H80
    Private Const SERVICE_USER_DEFINED_CONTROL = &H100
    Private Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL)Private Const SERVICE_CONTROL_CONTINUE = &H3
    Private Const SERVICE_CONTROL_INTERROGATE = &H4
    Private Const SERVICE_CONTROL_PAUSE = &H2
    Private Const SERVICE_CONTROL_SHUTDOWN = &H5
    Private Const SERVICE_CONTROL_STOP = &H1Private Const SERVICE_STOPPED = &H1
    Private Const SERVICE_START_PENDING = &H2
    Private Const SERVICE_STOP_PENDING = &H3
    Private Const SERVICE_RUNNING = &H4
    Private Const SERVICE_CONTINUE_PENDING = &H5
    Private Const SERVICE_PAUSE_PENDING = &H6
    Private Const SERVICE_PAUSED = &H7
    Private Const SERVICE_ACCEPT_STOP = &H1
    Private Const SERVICE_ACCEPT_PAUSE_CONTINUE = &H2
    Private Const SERVICE_ACCEPT_SHUTDOWN = &H4
       
    Private Const GENERIC_READ = &H80000000
    Private Const ERROR_INSUFFICIENT_BUFFER = 122
    Public Enum e_ServiceType
        e_ServiceType_Disabled = 4
        e_ServiceType_Manual = 3
        e_ServiceType_Automatic = 2
        e_ServiceType_SystemStart = 1
        e_ServiceType_BootTime = 0
    End EnumPrivate Const SERVICE_ERROR_NORMAL As Long = &H1Public Enum e_ServiceControl
       e_ServiceControl_Stop = &H1
       e_ServiceControl_Pause = &H2
       e_ServiceControl_Continue = &H3
       e_ServiceControl_Interrogate = &H4
       e_ServiceControl_Shutdown = &H5
    End EnumPublic Enum e_ServiceState
       e_ServiceState_Stopped = &H1
       e_ServiceState_StartPending = &H2
       e_ServiceState_StopPending = &H3
       e_ServiceState_Running = &H4
       e_ServiceState_ContinuePending = &H5
       e_ServiceState_PausePending = &H6
       e_ServiceState_Paused = &H7
    End EnumPrivate Type SERVICE_TABLE_ENTRY
       lpServiceName                  As String
       lpServiceProc                  As Long
       lpServiceNameNull              As Long
       lpServiceProcNull              As Long
    End TypePrivate Type SERVICE_STATUS
       dwServiceType                  As Long
       dwCurrentState                 As Long
       dwControlsAccepted             As Long
       dwWin32ExitCode                As Long
       dwServiceSpecificExitCode      As Long
       dwCheckPoint                   As Long
       dwWaitHint                     As Long
    End Type
    Private Declare Function StartServiceCtrlDispatcher Lib "advapi32.dll" Alias "StartServiceCtrlDispatcherA" (lpServiceStartTable As SERVICE_TABLE_ENTRY) As Long
    Private Declare Function RegisterServiceCtrlHandler Lib "advapi32.dll" Alias "RegisterServiceCtrlHandlerA" (ByVal lpServiceName As String, ByVal lpHandlerProc As Long) As Long
    Private Declare Function SetServiceStatus Lib "advapi32.dll" (ByVal hServiceStatus As Long, lpServiceStatus As SERVICE_STATUS) As Long
    Private Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
    Private Declare Function CreateService Lib "advapi32.dll" Alias "CreateServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal lpDisplayName As String, ByVal dwDesiredAccess As Long, ByVal dwServiceType As Long, ByVal dwStartType As Long, ByVal dwErrorControl As Long, ByVal lpBinaryPathName As String, ByVal lpLoadOrderGroup As String, ByVal lpdwTagId As String, ByVal lpDependencies As String, ByVal lp As String, ByVal lpPassword As String) As Long
    Private Declare Function DeleteService Lib "advapi32.dll" (ByVal hService As Long) As Long
    Private Declare Function QueryServiceConfig Lib "advapi32.dll" Alias "QueryServiceConfigA" (ByVal hService As Long, lpServiceConfig As Byte, ByVal cbBufSize As Long, pcbBytesNeeded As Long) As Long
    Private Declare Function QueryServiceStatus Lib "advapi32.dll" (ByVal hService As Long, lpServiceStatus As SERVICE_STATUS) As Long
       Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As LongDeclare Function CloseServiceHandle Lib "advapi32.dll" (ByVal hSCObject As Long) As Long
    Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long