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

标签 windows erlang elixir

我将其标记为 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/

相关文章:

windows - 从 Zip 文件夹中提取特定文件并重命名以包含 Zip 名称的批处理文件

elixir - Phoenix/Elixir/Ecto - unique_constraint 不适用于名称选项

windows - 为什么我不能删除带波浪号的文件?

windows - 支持目前在 32 位操作系统中工作的 64 位操作系统

windows - 似乎无法在批处理文件中获得一致的子字符串

erlang - Erlang vs OCaml(最适合的分割市场)

erlang - erlang 进程与 gen 行为有何关系

immutability - Elixir 变量真的是不可变的吗?

python - 为什么我可以手动构建 Python MSI 安装程序,但我的 Bamboo 远程代理服务却无法?

architecture - 在 OTP/Erlang 中将 ID 映射到进程的惯用方式是什么?