Windows SC.exe, как запрашивать управляющие коды в службе

Что я сделал

Я пытаюсь реализовать 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 с помощью утилиты командной строки Windows Service Control (SC).

Когда я ввожу sc control MyTestService 1, я обнаружил, что вместо вызова case Test1 он фактически остановил службу.

На мой взгляд, это объясняет, почему люди начинают значения команд с 128, чтобы предотвратить дублирование с уже используемыми кодами.


Я хотел бы иметь возможность видеть, какие управляющие коды уже используются службой Windows.

Вопрос из двух частей:

  • Есть ли способ запросить список всех используемых кодов?
  • Если да, есть ли способ узнать, что на самом деле делает каждый код?

person Intrastellar Explorer    schedule 21.10.2019    source источник
comment
Это может ответить на оба вопроса в этом сообщении, а также на другой вопрос, который вы разместили: docs.microsoft.com/en-us/windows/win32/api/winsvc/   -  person madreflection    schedule 22.10.2019
comment
Спасибо @madreflection! Это полезная страница   -  person Intrastellar Explorer    schedule 22.10.2019


Ответы (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.


Это отвечает на мой вопрос с другой стороны, с таблицей поиска, предоставленной Microsoft.

Любые другие ответы, показывающие функции запроса управляющего кода, по-прежнему приветствуются :)

person Intrastellar Explorer    schedule 22.10.2019