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。
其他任何显示控制代码查询功能的答案仍然欢迎:)
我做了什么
我正在尝试在名为 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。
其他任何显示控制代码查询功能的答案仍然欢迎:)