编写:Ove K鍁en
(提取自 wine/documentation/registry)
在 Win3.x 之后,注册表成为 Windows 的一个基本部分。Windows 自身,和所有遵循 Win95/98/NT/2000/whatever 的应用程序,在其中存贮配置和状态数据。尽管多数有理智的系统管理员(和 Wine 开发者)恶毒的诅咒 Windows 注册表的扭曲天性(twisted nature)。Wine 以某种方式支持它仍是必须的。
Windows 注册表是一个复杂的树结构,而且多数 Windows 程序员不完全知道注册表是怎样布置的,加上它的不同的 "蜂窝"和它们之间的大量连接;一个完整个论述(coverage)超出了本文档的范围。下面是你需要知道的基本的注册键。
这个基本根键(在 win9x 中,存储在隐藏文件 system.dat 中)包含与当前 Windows 有关的所有东西。
这个基本根键(在 win9x 中,存储在隐藏文件 user.dat 中)包含这个安装的每个用户的配置数据。
这是到 HKEY_LOCAL_MACHINE\Software\Classes 的一个连接。它包含描述文件关联、OLE 文档处理器、和 COM 类的数据。
这是到 HKEY_USERS\your_username 的一个连接,比如,你的个人配置。
如果你把 Wine 指向一个现存的 MS 安装(通过在 ~/.wine/config 中设置适当的目录,则 Wine 能从中装载注册表数据。但是,Wine 不会把任何东西保存到真实的 Windows 注册表中,而是保存到它自己的注册表文件中(见后)。当然,如果在 Windows 注册表和 Wine 注册表二者中都存在一个特定的注册值,则 Wine 将使用后者。
偶尔的,Wine 装载 Windows 注册表可能有麻烦。通常,这是因为注册表是不一致或以某种方式被破坏的。如果出现了这个问题,你可以从 MS 的网站下载 regclean.exe 并使用它来清理注册表。作为替代,你总是可以使用 regedit.exe 来把你需要的数据导出到一个文本文件中,并接着导入到 Wine 中。
在用户的主目录中,有一个叫 .wine 的子目录,Wine 缺省的将尝试在这里保存它的注册表。它保存到四个文件中,它们是:
这个文件包含 HKEY_LOCAL_MACHINE。
这个文件包含 HKEY_CURRENT_USER。
这个文件包含 HKEY_USERS\.Default (比如,缺省用户设置)。
Wine 把 HKEY_USERS 保存到这个文件中(当前和缺省二者),但不从中装载,除非 userdef.reg 丢失的。
所有这些文件是常人可读的文本文件,所以不象 Windows,如果需要的话,你实际上可以用一个普通的文本编辑器来编辑它。
除了这些文件之外,Wine 还可以有选择的从全局注册表文件中装载,它驻留在与全局 wine.conf 相同的目录中(比如,如果你从源代码编译的话则是 /usr/local/etc)。它们是:
包含 HKEY_LOCAL_MACHINE。
包含 HKEY_USERS。
一个系统管理员可以使用上面的文件结构配置系统,这样一个系统 Wine 安装(和应用程序)可以被所有用户共享,而仍旧让用户拥有它自己的个人化配置。一个管理员可以,在安装了 Wine 和用户需要访问的所有 Windows 应用软件之后,把结果的 system.reg 和 wine.userreg 复制成全局注册表文件(我们假定它驻留在 /usr/local/etc),使用:
cd ~/.wine cp system.reg /usr/local/etc/wine.systemreg cp wine.userreg /usr/local/etc/wine.userreg |
并且甚至可以把它们符号连接回管理员的帐户上,以便易于以后安装系统范围的应用程序:
ln -sf /usr/local/etc/wine.systemreg system.reg ln -sf /usr/local/etc/wine.userreg wine.userreg |
注意如果你以 root 安装 Wine,tools/wineinstall 脚本已经为你作好了这一切。如果你接着在 root 登录期间安装 Windows 应用程序,你的所有用户就自动的可以使用它们了。应用程序的设置将接受全局注册表,而用户的个人化配置将保存在他们自己的主目录中。
但是要注意对管理员帐户的操作 - 如果你把管理员的注册表复制或连接成全局注册表,任何用户就都可以读到管理员的偏好,如果在其中存储了敏感信息(口令、个人信息,等)这就不好了。只使用管理员帐户安装软件,而不是进行日常工作;平时使用一个普通用户帐户。
一个 Windows 注册表缺省的包含许多键,而其中的一些对于安装程序进行正确的操作是必须的。在叫 winedefault.reg 的文件中包含了 Wine 开发者找到的对安装应用程序是必须的键。如果你使用 tools/wineinstall 脚本则已经为你自动安装了它,如果你想手动安装它,你可以使用 regapi 工具做这件事。你可在 Wine 发布中的 documentation/no-windows 文档中找到更多的信息。
有了以上信息,下面查看一下 wine.conf/~/.wine/config 中处理注册表的选项。
控制是否尝试装载全局注册表,如果它存在的话。
控制是否尝试装载用户的注册表文件(在用户的主目录中的 .wine 子目录中)。
控制 Wine 是否尝试从在现存的 MS Windows 安装中的真实的 Windows 注册表中装载注册信息。
控制是否把注册信息写到用户的注册表文件中(目前,这是没有选择的,就是说如果你把它关闭了, Wine 根本就不能把注册表保存到磁盘上;你退出 Wine 之后,你的变动就消失了。)
这个选项被废弃了。Wine 现在总是使用新格式;前些时候去除了对旧格式的支持。
如果设置这个选项为一个非零的值,它指定你想以一个给定的时间间隔把注册表保存到磁盘上。如果你未设置它,则只在 wineserver 终止的时候把注册表保存到磁盘上。
控制是把整个注册表保存到用户的注册表文件中,还是只保存用户实际上变更了的子键。考虑到用户的注册表将屏弃任何全局注册表文件和 Windows 注册表文件,通常应该只保存用户修改了的子键; 这种方式下,对全局或 Windows 注册表其余部分的变动仍可以影响这个用户。