Delphi 获取服务的描述?

Delphi 获取服务的描述?,delphi,delphi-xe,Delphi,Delphi Xe,如何获得下面这样的Windows服务的描述? 我尝试使用Windows注册表,但大多数服务似乎没有描述,或者描述值存储在dll中-因此这似乎是错误的方法 例如: Windows时间服务(W32Time),注册表中的说明如下所示 @%SystemRoot%\system32\w32time.dll,-201 然而,Services.msc中的实际描述是: 在中的所有客户端和服务器上维护日期和时间同步 网络。如果此服务已停止,则日期和时间同步 将不可用。如果此服务已禁用,则 显式依赖它将无法启动

如何获得下面这样的Windows服务的描述?

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

例如:

Windows时间服务(W32Time),注册表中的说明如下所示

@%SystemRoot%\system32\w32time.dll,-201

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

在中的所有客户端和服务器上维护日期和时间同步 网络。如果此服务已停止,则日期和时间同步 将不可用。如果此服务已禁用,则 显式依赖它将无法启动

-

我一直在MSDN网站上搜索,发现:

lpDescription

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

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

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

@[path]dllname,-strID

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

-

pszOutBuf[输出,可选]

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

以下形式的字符串接受特殊处理:

@[路径]\dllname,-strID

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

我想这会说明为什么查看注册表时W32时间描述显示为@%SystemRoot%\system32\W32时间.dll,-201

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

这让我很困惑,如果有人能帮助我,我将不胜感激

我所需要的只是得到一个服务的描述,它肯定不会像这一样复杂吧


谢谢:)

您使用Unicode吗?的注释表示仅支持Unicode版本

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


您是否尝试过直接调用
RegLoadMUIStringW

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

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

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

请致电(您还会在那里找到一个C示例)

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

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

WMI Delphi代码创建工具允许您生成对象Pascal 和C++代码访问WMI(Windows管理工具) 类、事件和方法

你也可以查一下。使用WMI的免费(包括源代码)库。包括名为TServiceInfo的组件。 还包括一个用于工作和服务的演示

使用此组件,您可以在Win32_服务类中访问;你可以查一下


问候

你是什么意思谢谢,你是在讽刺还是什么?我问了一个我不确定的问题,我需要一些帮助和帮助。我读了MSDN,还是不明白。如果我不写下我研究过的东西,很多人会觉得我只是在找别人替我做这项工作。这不是我想要的,我只是想要一些关于如何做一些事情的建议,我认为这个网站是为了。其实我并不是想挖苦人。无论如何,你接受了绝地贡献者为你工作的答案。这清楚地表明。Windows能够使用资源存储本地化数据(例如,事件日志消息使用相同的机制)。服务描述可以以同样的方式进行本地化,而且它变得更加重要,因为Windows语言可以切换,所以应用程序不能仅在安装时执行本地化任务。您需要使用运行系统的正确区域设置来读取DLL资源。但是如果你使用服务管理器API,Windows会为你做这件事——这就是“发布”的方式。这些数据的内部存储可能会发生变化,API更稳定。@user539484不,这一点也不清楚。似乎已经完成了(即我不知道的绝地图书馆),我没有理由试图重写这一切。如果有什么需要的话,我可以从绝地图书馆的单位中研究并看看代码是如何工作的。@ldsandon谢谢你提供的信息。如果你不想依赖绝地,你可以