What I Have Done
I am trying to implement ServiceBase.OnCustomCommand(int command)
in a custom Windows Service called MyTestService
, with custom command codes as done in this answer:
public enum MyCustomCommands { ExecuteScript = 128 };
I noticed it's common to start custom command values at 128
.
I attempted to implement custom command codes like so:
public enum MyCustomCommandCodes
{
Test1 = 1,
Test2 = 2,
}
protected override void OnCustomCommand(int command)
{
switch (command)
{
case (int)MyCustomCommandCodes.Test1:
eventLog1.WriteEntry("Test1");
break;
case (int)MyCustomCommandCodes.Test2:
eventLog1.WriteEntry("Test2");
break;
default:
eventLog1.WriteEntry("default");
break;
}
}
I am calling OnCustomCommand
using Window's command-line utility Service Control (SC).
When I enter sc control MyTestService 1
, I found instead of calling case Test1
, it actually stopped the service.
In my mind, this explains why people start command values at 128
, it's to prevent overlap with codes already in use.
I would like to be able to see which control codes are already in use by a Windows service.
Two-part Question:
Per @madreflection's comment, which points out the ControlService
function: https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice
User-defined control code range: 128 to 255
.
And it also states why sc control MyTestService 1
stops the service, it's because 0x1
corresponds with the SERVICE_CONTROL_STOP
control code.
This answers my question from a different direction, with a lookup table given by Microsoft.