gpt4 book ai didi

delphi - delphi中枚举注册表子项

转载 作者:行者123 更新时间:2023-12-03 14:46:40 24 4
gpt4 key购买 nike

我正在尝试根据服务器上安装的 MySQL 版本在客户端计算机上安装驱动程序,为此我想通过注册表项检查服务器上的版本。

也就是说,我需要枚举 HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB 的子项。该键下通常只有一个键,其形式通常为:MySQL Server #.#,其中#代表数字。

但是因为我不知道这些值是什么,有没有办法获取 key ,然后我可以从名称中获取数字来确定要安装哪个驱动程序?我认为枚举子项是获取 key 的最佳方法,但也许巧妙的字符串格式化和循环也可以工作?

最佳答案

最好的解决方案是枚举子键。使用RegEnumKeyEx,您只需在一个简单的循环中执行此操作,直到没有更多的键可供枚举。

但是,在 Delphi 中使用 TRegistry 枚举子键更加容易:

program _EnumSubKeys;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes, Windows, Registry;

procedure EnumSubKeys(RootKey: HKEY; const Key: string);
var
Registry: TRegistry;
SubKeyNames: TStringList;
Name: string;
begin
Registry := TRegistry.Create;
Try
Registry.RootKey := RootKey;
Registry.OpenKeyReadOnly(Key);
SubKeyNames := TStringList.Create;
Try
Registry.GetKeyNames(SubKeyNames);
for Name in SubKeyNames do
Writeln(Name);
Finally
SubKeyNames.Free;
End;
Finally
Registry.Free;
End;
end;

begin
EnumSubKeys(HKEY_LOCAL_MACHINE, 'Software\Microsoft');
Readln;
end.

您应该注意的一件事是必须在注册表的 64 位 View 中进行搜索。如果您安装了 64 位版本的 MySQL,那么我希望它使用 64 位注册 TableView 。在 64 位操作系统上的 32 位 Delphi 进程中,您将需要回避注册表重定向。通过将 KEY_WOW64_64KEY 传递给 TRegistry 构造函数来完成此操作。

<小时/>

您建议的替代方案是将版本字符串的所有可能值硬编码到您的应用程序中。这听起来像是一旦发布不在硬编码列表中的版本,就会发生故障。

关于delphi - delphi中枚举注册表子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9004870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com