I was learning how to start a service from a program (VC++) in a Windows XP environment.
Basically, my problem was putting a system tray icon through a DLL that will be run by the winmgmt service in Windows XP. I tried so many ways within my knowledge but failed. So, I tried running it as a service option. It is simple. It just uses a few functions.
Using the Code
I used the sample code available in MSDN, everything relating to starting a service put into a function called StartSampleService(). The core part starts with OpenSCManager.
The OpenSCManager function establishes a connection to the service control manager on the specified computer and opens the specified service control manager database.
SC_HANDLE OpenSCManager( LPCTSTR lpMachineName, LPCTSTR lpDatabaseName, DWORD dwDesiredAccess );
This returns a handle of type SC_HANDLE that will be used to open a service.
schService = OpenService( schSCManager, // SCM database "IconService", // service name Here I gave // my sample service, Please change this SERVICE_ALL_ACCESS); // use according to your wishes. // See that the service is not // running currently.
Then next call is to StartService(..). The results displayed through the console are done through message boxes.
Points of Interest
The interesting thing I learned is doing Console applications and still using the windows functionality such as MessageBoxes.To get this, I started my project as a Win 32 console application and in next dialog box, I selected "An Application that supports MFC." It made things simpler.
DownloadsDownload demo project - 26 Kb
Download source - 3 Kb