【问题标题】:Getting the service name from the executable that the service starts从服务启动的可执行文件中获取服务名称
【发布时间】:2012-05-22 06:00:21
【问题描述】:

我编写了一个应用程序并使用服务来启动它。全部在 C++ 中,在 Windows 7 上。我的查询类似于 How can a Windows Service determine its ServiceName?

有没有办法在运行时确定(在 C++ 中)可执行文件中启动该可执行文件的服务的名称。

只需要一个指向正确方向的指针。

谢谢

【问题讨论】:

  • 这里有两个不同的问题:首先,如何获取启动 exe 的进程。二、如何获取进程的服务名。
  • 只有 1 个问题。当我的服务启动 exe 时,我想知道启动该可执行文件的服务的名称(在 exe 中)。
  • 就像我说的,这是一个两步过程,因为首先您需要识别启动您的 exe 的进程(也就是您的服务的 PID),然后您需要识别与该进程关联的服务的名称。
  • stackoverflow.com/questions/1841790/… 的可能重复项。在那里查看我的答案

标签: c++ windows-services


【解决方案1】:

您可以使用EnumServicesStatus 获取所有服务的列表,然后过滤它们,我想最好的方法是比较二进制名称。然后调用QueryServiceConfig获取服务配置,包括服务名称。

我希望这是您正在寻找的。 当然,要做到这一点,您的应用程序必须在 Windows Vista 和 7 中以管理员身份运行,否则对 OpenSCManager 的调用肯定会失败。

编辑: 另一种快速的方法是将服务名称硬编码在服务和可执行文件之间共享的 def 文件或单独的配置文件中,从而消除 SCManager 的所有麻烦

【讨论】:

  • 您仍然需要确定是哪个进程启动了 exe,然后跟踪该进程的服务名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 2010-11-29
  • 2014-03-21
  • 1970-01-01
相关资源
最近更新 更多