1

我做了什么

我正在尝试ServiceBase.OnCustomCommand(int command)在一个名为的自定义 Windows 服务中实现,并使用此答案MyTestService中的自定义命令代码:

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,我发现它实际上没有调用 case Test1,而是停止了服务。

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


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

两部分问题

  • 有没有办法查询所有正在使用的代码列表?
  • 如果是,是否还有一种方法可以查询每个代码的实际作用?
4

1 回答 1

1

根据@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控制码。


这从不同的方向回答了我的问题,微软提供了一个查找表。

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

于 2019-10-22T01:21:28.523 回答