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

时间:2015-03-25 15:43:24

标签: windows erlang elixir

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

Windows 8.1 x64

Erlang 17.4

Elixir 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']}

按照我在注册表中看到的内容,HKLM键下方还有其他几个子键。为什么他们不出现?

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

1 个答案:

答案 0 :(得分:2)

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

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

我还发现你最初需要给它绝对路径,注意开头的斜线。

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