我做了什么
我正在尝试在名为ServiceBase.OnCustomCommand(int command)
的自定义Windows服务中实现MyTestService
,并使用在this answer中完成的自定义命令代码:
public enum MyCustomCommands { ExecuteScript = 128 };
我注意到通常在128
处启动自定义命令值。
我试图实现类似这样的自定义命令代码:
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;
}
}
我正在使用Window的命令行实用程序OnCustomCommand
呼叫Service Control (SC)。
当我输入sc control MyTestService 1
时,我发现不是呼叫案例Test1
,而是实际上停止了服务。
在我看来,这解释了为什么人们在128
处开始命令值,这是为了防止与已经使用的代码重叠。
我希望能够看到Windows服务已经使用了哪些控制代码。
两部分问题:
ControlService
函数:https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice用户定义的控制代码范围:128 to 255
。
并且它也说明了为什么sc control MyTestService 1
停止服务,这是因为0x1
与SERVICE_CONTROL_STOP
控制代码相对应。
仍然欢迎显示控制代码查询功能的其他答案:)