4.4. 注册表

编写:Ove K鍁en

(提取自 wine/documentation/registry)

在 Win3.x 之后,注册表成为 Windows 的一个基本部分。Windows 自身,和所有遵循 Win95/98/NT/2000/whatever 的应用程序,在其中存贮配置和状态数据。尽管多数有理智的系统管理员(和 Wine 开发者)恶毒的诅咒 Windows 注册表的扭曲天性(twisted nature)。Wine 以某种方式支持它仍是必须的。

4.4.1. 注册表结构

Windows 注册表是一个复杂的树结构,而且多数 Windows 程序员不完全知道注册表是怎样布置的,加上它的不同的 "蜂窝"和它们之间的大量连接;一个完整个论述(coverage)超出了本文档的范围。下面是你需要知道的基本的注册键。

 

HKEY_LOCAL_MACHINE

这个基本根键(在 win9x 中,存储在隐藏文件 system.dat 中)包含与当前 Windows 有关的所有东西。

HKEY_USERS

这个基本根键(在 win9x 中,存储在隐藏文件 user.dat 中)包含这个安装的每个用户的配置数据。

HKEY_CLASSES_ROOT

这是到 HKEY_LOCAL_MACHINE\Software\Classes 的一个连接。它包含描述文件关联、OLE 文档处理器、和 COM 类的数据。

HKEY_CURRENT_USER

这是到 HKEY_USERS\your_username 的一个连接,比如,你的个人配置。

4.4.2. 使用 Windows 注册表

如果你把 Wine 指向一个现存的 MS 安装(通过在 ~/.wine/config 中设置适当的目录,则 Wine 能从中装载注册表数据。但是,Wine 不会把任何东西保存到真实的 Windows 注册表中,而是保存到它自己的注册表文件中(见后)。当然,如果在 Windows 注册表和 Wine 注册表二者中都存在一个特定的注册值,则 Wine 将使用后者。

偶尔的,Wine 装载 Windows 注册表可能有麻烦。通常,这是因为注册表是不一致或以某种方式被破坏的。如果出现了这个问题,你可以从 MS 的网站下载 regclean.exe 并使用它来清理注册表。作为替代,你总是可以使用 regedit.exe 来把你需要的数据导出到一个文本文件中,并接着导入到 Wine 中。

4.4.3. Wine 注册表数据文件

在用户的主目录中,有一个叫 .wine 的子目录,Wine 缺省的将尝试在这里保存它的注册表。它保存到四个文件中,它们是:

 

system.reg

这个文件包含 HKEY_LOCAL_MACHINE。

user.reg

这个文件包含 HKEY_CURRENT_USER。

userdef.reg

这个文件包含 HKEY_USERS\.Default (比如,缺省用户设置)。

wine.userreg

Wine 把 HKEY_USERS 保存到这个文件中(当前和缺省二者),但不从中装载,除非 userdef.reg 丢失的。

所有这些文件是常人可读的文本文件,所以不象 Windows,如果需要的话,你实际上可以用一个普通的文本编辑器来编辑它。

除了这些文件之外,Wine 还可以有选择的从全局注册表文件中装载,它驻留在与全局 wine.conf 相同的目录中(比如,如果你从源代码编译的话则是 /usr/local/etc)。它们是:

 

wine.systemreg

包含 HKEY_LOCAL_MACHINE。

wine.userreg

包含 HKEY_USERS。

4.4.4. 系统管理

一个系统管理员可以使用上面的文件结构配置系统,这样一个系统 Wine 安装(和应用程序)可以被所有用户共享,而仍旧让用户拥有它自己的个人化配置。一个管理员可以,在安装了 Wine 和用户需要访问的所有 Windows 应用软件之后,把结果的 system.regwine.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 应用程序,你的所有用户就自动的可以使用它们了。应用程序的设置将接受全局注册表,而用户的个人化配置将保存在他们自己的主目录中。

但是要注意对管理员帐户的操作 - 如果你把管理员的注册表复制或连接成全局注册表,任何用户就都可以读到管理员的偏好,如果在其中存储了敏感信息(口令、个人信息,等)这就不好了。只使用管理员帐户安装软件,而不是进行日常工作;平时使用一个普通用户帐户。

4.4.5. 缺省的注册表

一个 Windows 注册表缺省的包含许多键,而其中的一些对于安装程序进行正确的操作是必须的。在叫 winedefault.reg 的文件中包含了 Wine 开发者找到的对安装应用程序是必须的键。如果你使用 tools/wineinstall 脚本则已经为你自动安装了它,如果你想手动安装它,你可以使用 regapi 工具做这件事。你可在 Wine 发布中的 documentation/no-windows 文档中找到更多的信息。

4.4.6. [registry] 段

有了以上信息,下面查看一下 wine.conf/~/.wine/config 中处理注册表的选项。

 

LoadGlobalRegistryFiles

控制是否尝试装载全局注册表,如果它存在的话。

LoadHomeRegistryFiles

控制是否尝试装载用户的注册表文件(在用户的主目录中的 .wine 子目录中)。

LoadWindowsRegistryFiles

控制 Wine 是否尝试从在现存的 MS Windows 安装中的真实的 Windows 注册表中装载注册信息。

WritetoHomeRegistryFiles

控制是否把注册信息写到用户的注册表文件中(目前,这是没有选择的,就是说如果你把它关闭了, Wine 根本就不能把注册表保存到磁盘上;你退出 Wine 之后,你的变动就消失了。)

UseNewFormat

这个选项被废弃了。Wine 现在总是使用新格式;前些时候去除了对旧格式的支持。

PeriodicSave

如果设置这个选项为一个非零的值,它指定你想以一个给定的时间间隔把注册表保存到磁盘上。如果你未设置它,则只在 wineserver 终止的时候把注册表保存到磁盘上。

SaveOnlyUpdatedKeys

控制是把整个注册表保存到用户的注册表文件中,还是只保存用户实际上变更了的子键。考虑到用户的注册表将屏弃任何全局注册表文件和 Windows 注册表文件,通常应该只保存用户修改了的子键; 这种方式下,对全局或 Windows 注册表其余部分的变动仍可以影响这个用户。