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

问题描述 投票:0回答:1

我做了什么

我正在尝试在名为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服务已经使用了哪些控制代码。

两部分问题

  • 有没有办法查询正在使用的所有代码的列表?
  • 如果是,还有一种方法可以查询每个代码的实际作用吗?
c# windows service service-control-manager
1个回答
0
投票
每@madreflection的注释,指出了ControlService函数:https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice

用户定义的控制代码范围:128 to 255

并且它也说明了为什么sc control MyTestService 1停止服务,这是因为0x1SERVICE_CONTROL_STOP控制代码相对应。


这从另一个方向回答了我的问题,Microsoft提供了一个查找表。

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

© www.soinside.com 2019 - 2024. All rights reserved.