【问题标题】:Check If a Windows Service is Installed or not? (C++) [duplicate]检查是否安装了 Windows 服务? (C++)[重复]
【发布时间】:2013-08-26 10:50:16
【问题描述】:

我已经用 C++ 编写了一个 Windows 服务,它运行良好,现在我想添加一个功能,当我尝试安装它时可以首先检查它是否已经安装?

我试图寻找有关如何完成此任务的想法,但那里没有太多帮助。大多数问题和教程都是针对 C# 程序员的,他们使用 ServiceController 来完成任务,但我无法在 C++ 中访问任何此类。

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx

上面的链接在其示例部分没有显示此类的示例,并表示:

“目前没有可用的代码示例,或者可能不支持这种语言。”

其他信息: 我正在使用 Windows 7 64 位, 视觉工作室 2008, 语言是 C++。

我们非常感谢任何形式的帮助。谢谢。

【问题讨论】:

  • 我怀疑 C++ 代码与 C# 代码会有很大不同。尝试查看 C# 示例,同时检查 C++ 中的方法和属性。
  • 正如我所说,ServiceController 在 C++ 中不可访问
  • 不,ServiceController“首页”页面上没有示例,但是如果您查看例如静态GetServices method 您确实会看到一个有效的“C++”示例,这意味着它在 C++/CLI 和 C++/CX 中受支持。

标签: c++ windows windows-services


【解决方案1】:

更新:我将答案留在下面,但实际上这是 this 的副本,我将其标记为这样。

您将使用OpenService Win32 API。它返回服务的句柄,如果有问题的服务不存在,则返回NULLGetLastError() 将返回ERROR_SERVICE_DOES_NOT_EXIST;还有其他错误原因,所以不要忘记检查)。另外,不要忘记拨打CloseServiceHandle,以防通话成功。这也是您提到的 .NET 类在下面使用的内容。

您也可以通过Database of Installed Services, in the Windows Registry 查找此信息。

或者,您可以从查询此信息的安装程序中运行 external commands(例如 sc.exePowershell)。

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 2012-04-09
    • 2021-03-19
    • 2014-06-16
    • 2020-10-18
    • 2013-09-26
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多