如何使用Erlang Win32Reg来读取Windowsregistry项?

我将它标记为Erlang和Elixir,因为我的示例代码是Elixir,但是我怀疑答案会涉及到Erlang Win32Reg库。

Windows 8.1 x64

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

按照我在registry中看到的,HKLM键下面还有其他几个子键。 他们为什么不露面?

我不能轻易地在其他版本的Windows上testing这个问题,所以这个问题可能是特定于Windows 8.x的。 如果是这样的话,没关系。 我只是想确保我没有错误地编码。

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

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

我也发现你最初必须给它绝对路径,在开始时记下斜杠。

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