我用C ++编写了一个Windows服务,它工作得很好,现在我想添加一个功能,当我尝试安装它时,可以先检查是否已安装它?
我试图寻找有关如何完成此任务的想法,但那里没有太多帮助。大多数问题和教程都是针对C#程序员的,他们使用ServiceController来完成他们的任务,但是我无法在C ++中访问任何这样的类。
http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx
上面的链接在其示例部分中没有显示此类的示例,并说:
"目前没有代码示例,或者可能不支持此语言。"
其他资讯: 我使用的是Windows 7 64位, Visual Studio 2008, 语言是C ++。
非常感谢任何形式的帮助。感谢。
答案 0 :(得分:3)
更新:我在下面留下答案,但实际上这是this的副本,我将其标记为。
您将使用OpenService
Win32 API。它返回服务的句柄,如果相关服务不存在,则返回NULL
(GetLastError()
将返回ERROR_SERVICE_DOES_NOT_EXIST
;还有其他错误原因,所以不要忘记检查一下)。另外,如果呼叫成功,请不要忘记拨打CloseServiceHandle
。这就是你提到的.NET类在下面使用的内容。
您还可以在Database of Installed Services, in the Windows Registry上查看此信息。
或者,您可以从查询此信息的安装程序中运行external commands(例如sc.exe
或Powershell
)。