@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: This API allows you top set the status on a Windows Service. This is especially helpful in .NET in the various events you override from the ServiceBase class. For example, in the OnStart event, here is a recommendatation (see below for a custom enumeration with the SERVICE_START_PENDING and other states): !!PER 'Programming Server-Side Applications for Microsoft Windows 2000' ISBN: 0-7356-0753-2 myServiceStatus.currentState = (int)State.SERVICE_START_PENDING; myServiceStatus.checkPoint = 1; myServiceStatus.waitHint = 5000; SetServiceStatus(handle, ref myServiceStatus) After your worker thread(s) start and are your service is running, call (before OnStart ends): myServiceStatus.currentState = (int)State.SERVICE_RUNNING; myServiceStatus.checkPoint = 0; myServiceStatus.waitHint = 0; SetServiceStatus(handle, ref myServiceStatus); For more on writing services in .NET please search Google on: 'SetServiceStatus' and 'ServiceBase' !!!!C# Definition: [DllImport("advapi32.dll")] private static extern bool SetServiceStatus(IntPtr hServiceStatus, ref SERVICE_STATUS lpServiceStatus); !!!!VB Definition: Declare Function SetServiceStatus Lib "advapi32.dll" ( ByVal hServiceStatus As IntPtr, ByRef lpServiceStatus As SERVICE_STATUS) As Integer !!!!User-Defined Field Types: public enum State { SERVICE_STOPPED = 0x00000001, SERVICE_START_PENDING = 0x00000002, SERVICE_STOP_PENDING = 0x00000003, SERVICE_RUNNING = 0x00000004, SERVICE_CONTINUE_PENDING = 0x00000005, SERVICE_PAUSE_PENDING = 0x00000006, SERVICE_PAUSED = 0x00000007, } [StructLayout(LayoutKind.Sequential)] public struct SERVICE_STATUS { public long serviceType; public State currentState; public long controlsAccepted; public long win32ExitCode; public long serviceSpecificExitCode; public long checkPoint; public long waitHint; }; !!!!Notes: 1) The Microsoft MSDN Site is incorrect in their example for C#! They do not call the lpServiceStatus argument using the ref modifier. 2) To have this work on all platforms (64-bit and 32-bit) you must use the IntPtr. Never use an int/Integer as it does not adapt. Documentation: SetServiceStatus@msdn on MSDN
Edit Structures.SetSer...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.