我做了什么
我试图在一个名为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;
}
}
我使用Windows的命令行实用程序Service Control (SC)调用OnCustomCommand
。
当我输入sc control MyTestService 1
时,我发现它实际上停止了服务,而不是调用case Test1
。
在我看来,这解释了为什么人们在128
开始命令值,这是为了防止与已经使用的代码重叠。
我希望能够看到哪些控制代码已被Windows服务使用。
两部分问题:
- 是否有办法查询所有正在使用的代码列表?
- 如果是,是否也有一种方法来查询每个代码实际上做了什么?
1条答案
按热度按时间suzh9iv81#
根据@madreflection的评论,它指出了
ControlService
函数:https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice自定义控制码范围:
128 to 255
。并且还说明了为什么
sc control MyTestService 1
停止服务,这是因为0x1
与SERVICE_CONTROL_STOP
控制代码相对应。这从一个不同的方向回答了我的问题,用微软给出的一个查找表。