我将其标记为 Erlang 和 Elixir,因为我的示例代码在 Elixir 中,但我怀疑答案将涉及 Erlang Win32Reg 库。
Windows 8.1 x64
二郎 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 key 并执行此操作时:
{:ok, sub_keys} = :win32reg.sub_keys(handle)
我明白了:
{:ok, ['Software']}
根据我在 regedit 中看到的内容,在 HKLM 键下还有几个其他子键。他们为什么不出现?
我无法在其他版本的 Windows 上轻松测试此问题,因此此问题可能特定于 Windows 8.x。如果是这样,那很好;我只是想确保我没有编写错误的代码。
最佳答案
查看 win32reg 文档,您提到的别名是有效的,但它们是字符串,因为您可以将它们用作路径的元素。
:win32reg.change_key(handle, '\\local_machine\\')
我还发现您最初需要为其提供绝对路径,请注意开头的斜杠。
通过这些更改,我能够看到与 regedit 相同的节点。
关于windows - 如何使用 Erlang Win32Reg 读取 Windows 注册表项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29260235/