检测注册&没有管理员权限的运行服务

时间:2014-04-24 13:02:08

标签: winapi visual-c++ windows-services

我的桌面应用程序应该有不同的行为,具体取决于可选服务是否正在运行。我正在使用服务控制管理器检查服务是否已注册,如果是,则检查它是否正在运行。这很有效,直到我意识到这似乎要求桌面应用程序以管理员身份运行。

在我的桌面应用程序中检查这些条件(已注册和正在运行)的最佳方法是什么,而不需要管理权限?

2 个答案:

答案 0 :(得分:1)

由于我对C#方面比较熟悉,我不确定是否有一个正式的API在C ++中执行此操作,不需要某种形式的提升权限。也就是说,我想到了几种替代方案。

  1. 您可以让服务打开服务器套接字并侦听特定端口上的本地主机地址(127.0.0.1)。当您的应用程序开始运行时,它将连接到此地址。如果连接成功,则表示您的服务正在运行。
  2. 另一种选择是让您的服务在开始运行时创建一个命名的系统级互斥锁,并在服务关闭时关闭它。您的应用程序可以检查互斥锁是否存在。如果是,则表示您的服务正在运行。
  3. HTH

答案 1 :(得分:1)

您无需管理员权限即可向SCM查询服务信息。

致电OpenSCManager()请求SC_MANAGER_CONNECT访问权限,然后致电OpenService()请求SERVICE_QUERY_STATUS访问权限。这将告诉您是否安装了服务。如果是,请调用QueryServiceStatus()以确定它是否正在运行。

相关问题