获取服务描述?

时间:2012-02-03 23:30:04

标签: delphi delphi-xe

我如何获得如下所示的Windows服务说明?

enter image description here

我尝试使用Windows注册表,但大多数服务似乎没有描述,或者描述值存储在dll中 - 所以这似乎是错误的方法。

示例:

Windows时间服务(W32Time),注册表中的说明显示为

  

@%SYSTEMROOT%\ SYSTEM32 \ w32time.dll,-201

然而,在Services.msc中看到的实际描述是:

  

维护所有客户端和服务器上的日期和时间同步   网络。如果此服务已停止,则日期和时间同步   将无法使用。如果禁用此服务,则表示任何服务   明确依赖它将无法启动。

-

我一直在MSDN网站上搜索并发现了这个:

SERVICE_DESCRIPTION structure

  

lpDescription

     

服务的描述。如果此成员为NULL,则   描述保持不变。如果此值为空字符串(“”),   删除当前描述。

     

服务描述不得超过注册表值的大小   类型REG_SZ。

     

该成员可以使用以下格式指定本地化字符串:

     

@ [路径] DLLNAME。-strID

     

标识符为strID的字符串是从dllname加载的;路径是   可选的。有关详细信息,请参阅RegLoadMUIString ....

     

-

     

pszOutBuf [out,optional]

     

指向接收字符串的缓冲区的指针。

     

以下表单的字符串会受到特殊处理:

     

@ [路径] \ DLLNAME。-strID

     

标识符为strID的字符串是从dllname加载的;路径是   可选的。如果pszDirectory参数不为NULL,则该目录为   预先添加到注册表数据中指定的路径。注意   dllname可以包含要扩展的环境变量。

我认为这会建议为什么查看注册表会将W32Time描述显示为@%SystemRoot%\ system32 \ w32time.dll,-201

如果我理解正确,我需要读取内存中的dll名称并检索存储服务描述的strID?

这对我来说很困惑,如果有人能提供帮助,我将不胜感激。

我只需要获得服务的描述,它肯定不会像这样复杂吗?

谢谢:)

5 个答案:

答案 0 :(得分:4)

致电QueryServiceConfig2(你会在那里找到一个C示例)。

无论您需要做什么服务都应该通过Service Manager API来完成。注册表数据应被视为操作系统的“私有”。

答案 1 :(得分:3)

在所有版本的Delphi中,JEDI JCL包含了获取服务的友好描述所需的一切,以及与服务控制API有关的任何其他内容。

单元JclSvcCtrl.pas中的类TJclSCManager包含属性Services,其中包括已注册的每个服务的名称和描述,并且还允许您执行启动,停止,启用和禁用服务等操作。

更新:ldsandon的另一个答案指出,Delphi RTL显然已经在单元WinSvc中的XE2中包含了这个。请参阅下面有关QueryServiceConfig2的答案。感谢ldsandon指出这个事实。

答案 2 :(得分:2)

使用 WMI 是另一种直接使用Windows API的方法,例如借助(免费)API代码生成器

<强> WMI Delphi Code Creator

  

WMI Delphi Code Creator工具允许您生成Object Pascal   和C ++代码访问WMI(Windows Management Instrumentation)   课程,活动和方法。

答案 3 :(得分:1)

您使用的是Unicode吗? RegLoadMUIString function的评论说只支持Unicode版本。

  

仅支持Unicode的RegLoadMUIString函数。虽然   声明了此函数的Unicode(W)和ANSI(A)版本,   RegLoadMUIStringA函数返回ERROR_CALL_NOT_IMPLEMENTED。   应用程序应显式调用RegLoadMUIStringW或指定   Unicode作为平台调用(PInvoke)调用中的字符集。

您是否尝试过直接致电RegLoadMUIStringW

答案 4 :(得分:0)

您还可以查看the GLibWMI library。与WMI一起使用的免费(和包含源代码)库。包含名为 TServiceInfo 的组件。 还包括一个工作wirh服务的演示。

使用此组件,您可以访问Win32_Service类;您可以查看the properties and structure here

此致