如何使用 Erlang Win32Reg 读取 Windows 注册表项?

How To Use Erlang Win32Reg to Read Windows Registry Keys?

我将其标记为 Erlang 和 Elixir,因为我的示例代码在 Elixir 中,但我怀疑答案将涉及 Erlang Win32Reg 库。

Windows 8.1 x64

二郎 17.4

长生不老药 1.0.3

我在 Windows 上从 Iex 执行以下操作:

{:ok, handle} = :win32reg.open([:read])
:ok = :win32reg.change_key(handle, :local_machine)

当我执行此操作时出现此错误:

** (FunctionClauseError) no function clause matching in :win32reg.split_key/3
    (stdlib) win32reg.erl:364: :win32reg.split_key(:local_machine, [], [])
    (stdlib) win32reg.erl:340: :win32reg.parse_relative/2
    (stdlib) win32reg.erl:122: :win32reg.change_key/3

但是,如果我改用此代码:

:ok = win32reg.change_key(handle,'HKEY_LOCAL_MACHINE') 

它按预期工作。我直接在 werl shell 中尝试了同样的代码,结果是一样的。

1.) :local_machine 不应该一样工作吗?

2.) 当我更改为 HKLM 键并执行此操作时:

{:ok, sub_keys} = :win32reg.sub_keys(handle)

我明白了:

{:ok, ['Software']}

根据我在 regedit 中看到的内容,在 HKLM 项下还有其他几个子项。他们为什么不出现?

我无法在 Windows 的其他版本上轻松测试此问题,因此此问题可能特定于 Windows 8.x。如果是这样,那很好;我只是想确保我没有编码错误。

查看 win32reg 文档,您提到的别名是有效的,但它们是字符串,因为您可以将它们用作路径的元素。

:win32reg.change_key(handle, '\local_machine\')

我还发现您最初需要为其提供绝对路径,请注意开头的斜杠。

通过这些更改,我能够看到与 regedit 相同的节点。