我正在尝试使用以下方法从 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`"