我将此标记为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.如果是这样的话,那很好;我只是想确保我没有错误编码。
答案 0 :(得分:2)
查看win32reg文档,您提到的别名是有效的,但它们是字符串,因为您可以将它们用作路径的元素。
:win32reg.change_key(handle, '\\local_machine\\')
我还发现你最初需要给它绝对路径,注意开头的斜线。
通过这些更改,我能够看到与regedit相同的节点。