Предполагая, что мой код (DLL) уже запущен внутри приложения, которое работает как служба. Как найти название службы? Я бы хотел более элегантный способ, чем получить путь к процессу и перечислить службы в реестре.Win32 C++ Как получить текущее приложение Имя службы
1
A
ответ
5
Я бы предложил использовать GetCurrentProcessId, чтобы получить идентификатор процесса службы, в которой вы работаете. Затем используйте EnumServiceStatusEx, чтобы перечислять службы (без необходимости использовать реестр самостоятельно).
Вы можете сопоставить идентификатор процесса с ENUM_SERVICE_STATUS_PROCESS.ServiceStatusProcess.dwProcessId
с идентификатором текущего процесса и получить его имя. Например:
void enumerateServices(DWORD processId)
{
SC_HANDLE hSCM = OpenSCManager(NULL, NULL,
SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_CONNECT);
if (hSCM == NULL)
{
return;
}
DWORD bufferSize = 0;
DWORD requiredBufferSize = 0;
DWORD totalServicesCount = 0;
EnumServicesStatusEx(hSCM,
SC_ENUM_PROCESS_INFO,
SERVICE_WIN32,
SERVICE_STATE_ALL,
nullptr,
bufferSize,
&requiredBufferSize,
&totalServicesCount,
nullptr,
nullptr);
std::vector<BYTE> buffer(requiredBufferSize);
EnumServicesStatusEx(hSCM,
SC_ENUM_PROCESS_INFO,
SERVICE_WIN32,
SERVICE_STATE_ALL,
buffer.data(),
buffer.size(),
&requiredBufferSize,
&totalServicesCount,
nullptr,
nullptr);
LPENUM_SERVICE_STATUS_PROCESS services =
reinterpret_cast<LPENUM_SERVICE_STATUS_PROCESS>(buffer.data());
for (unsigned int i = 0; i < totalServicesCount; ++i)
{
ENUM_SERVICE_STATUS_PROCESS service = services[i];
if (service.ServiceStatusProcess.dwProcessId == processId)
{
// This is your service.
std::wcout << service.lpServiceName << L"PID: " <<
service.ServiceStatusProcess.dwProcessId << std::endl;
}
}
(void)CloseServiceHandle(hSCM);
}
Применяются стандартные положения об отказе от ответственности. Я также неправильно проверил размеры буфера и т. Д.
Смежные вопросы
- 1. Как получить текущее имя пользователя в C#?
- 2. Получить текущее имя ScheduledJob
- 3. Как получить текущее имя сети?
- 4. Как получить текущее имя маршрута?
- 5. Как получить текущее имя пользователя?
- 6. Получить текущее имя пользователя
- 7. Получить текущее имя среды
- 8. Получить текущее имя компонента
- 9. Получить текущее имя метода
- 10. Получить текущее имя столбца
- 11. Получить текущее имя шаблона?
- 12. Получить установленное приложение win32
- 13. Получить имя службы из кода
- 14. Получить имя службы внутри службы
- 15. Получить текущее активное имя приложения
- 16. Как получить текущее доменное имя в ASP.NET
- 17. Как получить текущее имя файла приложения AIR?
- 18. Как получить текущее имя темы Windows?
- 19. Как получить текущее имя хоста в Heroku
- 20. Получить текущее имя файла сценария
- 21. Получить текущее имя файла PHP
- 22. Python3: получить текущее имя окна?
- 23. pysvn: получить текущее имя пользователя
- 24. Получить текущее имя пользователя AutoIt
- 25. Получить текущее имя ветки или имя тега
- 26. Получить текущее имя пользователя в службах Windows
- 27. Как получить доступное имя с помощью win32 из C#?
- 28. Как получить имя файла на C++ с помощью Win32 Handle?
- 29. Как получить текущее имя модуля даты с Linq в C#?
- 30. Как получить текущее имя пользователя Windows в C# Web APP?
Большое спасибо! К сожалению, мой рейтинг не позволяет мне вознаграждать вас. – user1309871
@ user1309871 Вы можете пометить ответ как принятый, если вам нравится его. В левой части ответа должен быть тик. – Steve