【发布时间】:2012-02-03 23:30:03
【问题描述】:
我如何获得如下 Windows 服务的描述?
我尝试使用 Windows 注册表,但大多数服务似乎没有描述,或者描述值存储在 dll 中 - 所以这似乎是错误的方法。
例子:
Windows时间服务(W32Time),注册表中的描述显示为
@%SystemRoot%\system32\w32time.dll,-201
但在 Services.msc 中看到的实际描述是:
在所有客户端和服务器上保持日期和时间同步 网络。如果此服务停止,日期和时间同步 将不可用。如果此服务被禁用,任何服务 显式依赖它会启动失败。
-
我一直在 MSDN 网站上搜索,发现了这个:
lpDescription
服务的描述。如果此成员为 NULL,则 描述保持不变。如果此值为空字符串 (""), 当前的描述被删除。
服务描述不得超过注册表值的大小 REG_SZ 类型。
此成员可以使用以下格式指定本地化字符串:
@[路径]dllname,-strID
标识符为strID的字符串是从dllname加载的;路径是 选修的。如需更多信息,请参阅RegLoadMUIString....
-
pszOutBuf [输出,可选]
指向接收字符串的缓冲区的指针。
以下形式的字符串接受特殊处理:
@[路径]\dllname,-strID
标识符为strID的字符串是从dllname加载的;路径是 选修的。如果 pszDirectory 参数不为 NULL,则目录为 附加到注册表数据中指定的路径。注意 dllname 可以包含要扩展的环境变量。
我认为这表明为什么查看注册表会显示 W32Time 描述为 @%SystemRoot%\system32\w32time.dll,-201
如果我理解正确,我需要读取内存中的 dll 名称并检索存储服务描述的 strID?
这一切都让我感到困惑,如果有人可以提供帮助,我将不胜感激。
我只需要获取一个服务的描述,它肯定不能这么复杂吗?
谢谢:)
【问题讨论】:
-
谢谢你是什么意思,你是想讽刺还是什么?我问了一个我不确定的问题,我需要一些帮助和帮助。我在 MSDN 上阅读,但仍然不明白。如果我没有放下我研究的内容,很多人会认为我只是在寻找其他人来为我做这项工作。这不是我想要的,我只是想要一些关于如何做我认为这个网站的用途的建议。不过没必要讽刺。
-
其实我不是[试图]讽刺。无论如何,您接受了 JEDI 贡献者为您工作的答案。这清楚地表明了。
-
Windows 能够使用资源来存储本地化数据(例如,事件日志消息使用相同的机制)。服务描述可以以同样的方式进行本地化,而且它变得更加重要,因为可以切换 Windows 语言,因此应用程序不能仅在设置时执行本地化任务。您需要使用您正在运行的系统的正确区域设置来读取 DLL 资源。但是,如果您使用 Service Manager API,Windows 会为您做这件事——这就是“发布”的方式。这些数据的内部存储可能会发生变化,API 更加稳定。
-
@user539484 不,它根本没有清楚地表明这一点。由于它似乎已经完成(即我不知道的绝地图书馆),我没有理由尝试重写它。如果有的话,我可以从 Jedi 库的单元中研究并查看代码是如何工作的。
-
@ldsandon 感谢您提供的信息。