Windows SC.exe 如何查询服务上的控制代码

Windows SC.exe how to query control codes on a service

我做了什么

我正在尝试在名为 MyTestService 的自定义 Windows 服务中实施 ServiceBase.OnCustomCommand(int command),使用自定义命令代码,如 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;
    }
}

我正在调用 OnCustomCommand 使用 Window 的命令行实用程序 Service Control (SC)

当我输入sc control MyTestService 1时,我发现它并没有调用caseTest1,而是停止了服务。

在我看来,这解释了为什么人们在 128 开始命令值,这是为了防止与已在使用的代码重叠。


我希望能够查看 Windows 服务已在使用哪些控制代码。

两部分问题

根据@madreflection 的评论,指出 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控制码


这从不同的方向回答了我的问题,通过 Microsoft 提供的查找 table。

其他任何显示控制代码查询功能的答案仍然欢迎:)