从 Cygwin 修改注册表不起作用

从 Cygwin 修改注册表不起作用

我正在尝试使用以下方法从 Cygwin shell 导入 .reg 文件

regedit.exe <registryfile>.reg

弹出对话框询问我是否要应用注册表更改,我单击“是”,但未进行任何更改。如果我通过命令提示符或双击 .reg 文件运行完全相同的命令,则更改将正确应用。Cygwin 中什么原因导致 regedit 无法工作?我该如何从 Cygwin 修改注册表?

我发现我的更改已应用,但应用于某个其他 dat 文件。当我从 Cygwin 调用 regedit 时,我得到了一堆与我预期不同的键(例如,所有 MSSQL 键都不在那里,但许多其他键在那里)...为什么 Cygwin 打开了不同的文件?

答案1

本答案的部分内容假设您正在运行 64 位版本的 Windows。

Windows 已设置了一些注册表重定向,这使得注册表根据您查看的环境而有所不同。最突出的是HKEY_CURRENT_USER,它根据正在使用的用户配置文件加载,以及 32 位进程的重定向 - 一个例子是Wow6432Node下的键SOFTWARE,这是 32 位应用程序在查找SOFTWARE键时看到的内容。

最有可能的是,您的 Cygwin 进程实际上是在其他用户下运行的,因此regedit以该用户身份启动。否则,这可能是由于在 32 位模式下运行 - 由于不知道您针对的是哪些特定键,我无法肯定地说。可能还有其他我不知道的重定向。

有关 32 位 (WOW64) 注册表重定向的详细信息,请参阅这里

这里有一个重定向密钥列表这里

对于程序员来说,旗帜您可以使用它来访问特定版本的注册表。对于我们其他人来说,请运行适当版本的 Regedit - 至少在 Windows 7 和 8 上,%SystemRoot%\regedit.exe始终是 64 位版本,%SystemRoot%\SysWOW64\regedit.exe始终是 32 位版本。

答案2

要使用 Cygwin bash 将名为 /tmp/file.reg 的文件导入注册表,请尝试:

reg=/tmp/file.reg
unix2dos $reg
cmd /c "%SystemRoot%\regedit.exe \s `cygpath -w $reg`"

相关内容