How to create windows service using Visual basic 6.0?
I know it using vb.Net but if anybody worked on it using vb 6.0 then please let me know.
help is appreciated
thanks & regards
PPCC
Printable View
How to create windows service using Visual basic 6.0?
I know it using vb.Net but if anybody worked on it using vb 6.0 then please let me know.
help is appreciated
thanks & regards
PPCC
How do you create windows services? Are you talking about Start & Stop Windows Services from Control Panel?
To create a NT Service from VB...
VB Code:
Option Explicit 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_PROCESS Private Const SERVICE_ACCEPT_STOP = &H1 Private Const SERVICE_ACCEPT_PAUSE_CONTINUE = &H2 Private Const SERVICE_ACCEPT_SHUTDOWN = &H4 Private 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 = &H20 Public 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_DEMAND_START As Long = &H3 Private Const SERVICE_ERROR_NORMAL As Long = &H1 ' Private Enum SERVICE_CONTROL Private Const SERVICE_CONTROL_STOP = &H1 Private Const SERVICE_CONTROL_PAUSE = &H2 Private Const SERVICE_CONTROL_CONTINUE = &H3 Private Const SERVICE_CONTROL_INTERROGATE = &H4 Private Const SERVICE_CONTROL_SHUTDOWN = &H5 ' End Enum ' Private Enum SERVICE_STATE Private 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 ' End Enum Private Type SERVICE_TABLE_ENTRY lpServiceName As String lpServiceProc As Long lpServiceNameNull As Long lpServiceProcNull As Long End Type Private 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 Declare 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 '** Change SERVICE_NAME as needed Private Const SERVICE_NAME As String = "MyService" Private hServiceStatus As Long Private ServiceStatus As SERVICE_STATUS Public Sub Main() Dim hSCManager As Long Dim hService As Long Dim ServiceTableEntry As SERVICE_TABLE_ENTRY Dim b As Boolean Dim cmd As String cmd = Trim(LCase(Command())) Select Case cmd Case "install" 'Install service on machine hSCManager = OpenSCManager(vbNullString, vbNullString, _ SC_MANAGER_CREATE_SERVICE) hService = CreateService(hSCManager, SERVICE_NAME, _ SERVICE_NAME, SERVICE_ALL_ACCESS, _ SERVICE_WIN32_OWN_PROCESS, _ SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, _ App.Path & "\" & App.EXEName, vbNullString, _ vbNullString, vbNullString, vbNullString, _ vbNullString) CloseServiceHandle hService CloseServiceHandle hSCManager Case "uninstall" 'Remove service from machine hSCManager = OpenSCManager(vbNullString, vbNullString, _ SC_MANAGER_CREATE_SERVICE) hService = OpenService(hSCManager, SERVICE_NAME, _ SERVICE_ALL_ACCESS) DeleteService hService CloseServiceHandle hService CloseServiceHandle hSCManager Case Else 'Start the service ServiceTableEntry.lpServiceName = SERVICE_NAME ServiceTableEntry.lpServiceProc = FncPtr(AddressOf ServiceMain) b = StartServiceCtrlDispatcher(ServiceTableEntry) End Select End Sub Public Sub ServiceMain(ByVal dwArgc As Long, ByVal lpszArgv As Long) Dim b As Boolean 'Set initial state ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS ServiceStatus.dwCurrentState = SERVICE_START_PENDING ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP _ Or SERVICE_ACCEPT_PAUSE_CONTINUE _ Or SERVICE_ACCEPT_SHUTDOWN ServiceStatus.dwWin32ExitCode = 0 ServiceStatus.dwServiceSpecificExitCode = 0 ServiceStatus.dwCheckPoint = 0 ServiceStatus.dwWaitHint = 0 hServiceStatus = RegisterServiceCtrlHandler(SERVICE_NAME, AddressOf Handler) ServiceStatus.dwCurrentState = SERVICE_START_PENDING b = SetServiceStatus(hServiceStatus, ServiceStatus) '** Do Initialization Here ServiceStatus.dwCurrentState = SERVICE_RUNNING b = SetServiceStatus(hServiceStatus, ServiceStatus) '** Perform tasks -- if none exit ''** If an error occurs, the following should be used for shutting ''** down: '' SetServerStatus SERVICE_STOP_PENDING '' Clean up '' SetServerStatus SERVICE_STOPPED End Sub Public Sub Handler(ByVal fdwControl As Long) Dim b As Boolean Select Case fdwControl Case SERVICE_CONTROL_PAUSE '** Do whatever it takes to pause here. ServiceStatus.dwCurrentState = SERVICE_PAUSED Case SERVICE_CONTROL_CONTINUE '** Do whatever it takes to continue here. ServiceStatus.dwCurrentState = SERVICE_RUNNING Case SERVICE_CONTROL_STOP ServiceStatus.dwWin32ExitCode = 0 ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING ServiceStatus.dwCheckPoint = 0 ServiceStatus.dwWaitHint = 0 'Might want a time estimate b = SetServiceStatus(hServiceStatus, ServiceStatus) '** Do whatever it takes to stop here. ServiceStatus.dwCurrentState = SERVICE_STOPPED Case SERVICE_CONTROL_INTERROGATE 'Fall through to send current status. Case Else End Select 'Send current status. b = SetServiceStatus(hServiceStatus, ServiceStatus) End Sub Public Function FncPtr(ByVal fnp As Long) As Long FncPtr = fnp End Function
Ok tell me, this code is need to write in class module, if yes then what to do next , i mean how to add this service in windows service list so that i can start and stop this service.
tx
PPCC
hi.
i had this code in my sources. but this code have a problem.
i compile this code and put the exe file in address of my service to run.
when i click on start of my service to run this exe file , program terminate.
see the error.jpg file
program terminate on this line.
b = SetServiceStatus(hServiceStatus, ServiceStatus)
and show me an error.
see the error service.jpg
Please help me.
checkout this:
The Easiest Way to Create an NT Service With VB6
Or... here's an OCX (from MS) that's easy to use too.
yeah that worked cssriraman :thumb:
attached sample project ..
BTW you will need to copy the exe's from that link to the projects folder to test or use as we cant include them in attachments (?) ..
Yes, that control is easy to use and I also have code on the forums but remember that its unsupported by MS. ;)
Yeah, sad but true. But to be fair to MS, I've been using that control in a production environment for years now and have never had a problem with it.Quote:
Originally Posted by RobDog888
I like the APIs better as there is more control and they are not really to hard to work with. Plus, no ocx to distribute.
Also, if you wanted to add a dependancy service you cant with the ocx. ;)
This is an internal app so there's no issue about distributing the OCX, but I agree with you about API's especially if you can be bothered to take the time to wrap them up in a nice, friendly to use class etc. :thumb:
hi.
i dont want to use ocx.
anyone have source of that ocx?
It uses code similar to the APIs I posted but since Microsoft wrote it you wont be able to get its source and would not be legal to do anyways ;)
can i run my program as service without any component or refrence in vb6. only with code.
Only using RobDog's code. That doesn't require any external components or references other than the APIs.
what is RobDog's code?Quote:
Originally Posted by pnish
In post #3 in this thread...
i used that code. but that code have a problem. see my post(Post 5).Quote:
Originally Posted by pnish
But you need to tell us if you are running 2000 or above and if you have Admin permissions?
also, the error message shows that "Nima3" contains an error to the APIs cant start/stop it correctly. What does Nima3 contain and is it error free?
my os is:
Windows XP professional
version 2002
service pack2
and i have a admin user.
"Nima3" is my service name.
can you run a program as service with RobDog's code?