After Win3.x, the registry became a fundamental part of Windows. It is the
place where both Windows itself, and all Win95/98/NT/2000/whatever-compliant
applications, store configuration and state data. While most sane system
administrators (and Wine developers) curse badly at the twisted nature of
the Windows registry, it is still necessary for Wine to support it somehow.
<h3>Registry structure</h3>
The Windows registry is an elaborate tree structure, and not even most
Windows programmers are fully aware of how the registry is
laid out, with its different "hives" and numerous links between them;
a full coverage is out of the scope of this article. But here are the
basic registry keys you might need to know about for now.
HKEY_LOCAL_MACHINE
This fundamental root key (in win9x, stored in the hidden file system.dat)
contains everything pertaining to the current Windows installation.
HKEY_USERS
This fundamental root key (in win9x, stored in the hidden file user.dat)
contains configuration data for every user of the installation.
HKEY_CLASSES_ROOT
This is a link to HKEY_LOCAL_MACHINE\Software\Classes.
It contains data describing things like file associations,
OLE document handlers, and COM classes.
HKEY_CURRENT_USER
This is a link to HKEY_USERS\your_username, i.e., your personal configuration.
<h3>Using a Windows registry</h3>
If you point Wine at an existing MS Windows installation (by setting the
appropriate directories in wine.conf/.winerc), then Wine is able to load
registry data from it. However, Wine will not save anything to the real Windows
registry, but rather to its own registry files (see below). Of course, if a
particular registry value exists in both the Windows registry and in the Wine
registry, then Wine will use the latter.
Occasionally, Wine may have trouble loading the Windows registry. Usually,
this is because the registry is inconsistent or damaged in some way. If that
becomes a problem, you may want to download the regclean.exe from the MS website
and use it to clean up the registry. Alternatively, you can always use
regedit.exe to export the registry data you want into a text file, and then
import it in Wine.
<h3>Wine registry data files</h3>
In the user's home directory, there is a subdirectory named .wine, where Wine
will try to save its registry by default. It saves into four files, which
are:
system.reg
This file contains HKEY_LOCAL_MACHINE.
user.reg
This file contains HKEY_CURRENT_USER.
userdef.reg
This file contains HKEY_USERS\.Default (i.e. the default user settings).
wine.userreg
Wine saves HKEY_USERS to this file (both current and default user), but
does not load from it, unless userdef.reg is missing.
All of these files are human-readable text files, so unlike Windows, you can
actually use an ordinary text editor on them if you must.
In addition to these files, Wine can also optionally load from global
registry files residing in the same directory as the global wine.conf
(i.e. /usr/local/etc if you compiled from source).
These are:
wine.systemreg
Contains HKEY_LOCAL_MACHINE.
wine.userreg
Contains HKEY_USERS.
<h3>System administration</h3>
With the above file structure, it is possible for a system administrator
to configure the system so that a system Wine installation (and applications)
can be shared by all the users, and still let the users all have their own
personalized configuration. An administrator can, after having installed
Wine and any Windows application software he wants the users to have access to,
copy the resulting system.reg and wine.userreg over to the global registry files
(which we assume will reside in /usr/local/etc here), with:
cd ~/.wine
cp system.reg /usr/local/etc/wine.systemreg
cp wine.userreg /usr/local/etc/wine.userreg
and perhaps even symlink these back to the administrator's account,
to make it easier to install apps system-wide later:
ln -sf /usr/local/etc/wine.systemreg system.reg
ln -sf /usr/local/etc/wine.userreg wine.userreg
Note that the tools/wineinstall script already does all of this for you,
if you install Wine as root. If you then install Windows applications
while logged in as root, all your users will automatically be able to use
them. While the application setup will be taken from the global registry,
the users' personalized configurations will be saved in their own
home directories.
But be careful with what you do with the administrator account
- if you do copy or link the administrator's registry to the global
registry, any user might be able to read the administrator's preferences,
which might not be good if sensitive information (passwords, personal
information, etc) is stored there. Only use the administrator account
to install software, not for daily work; use an ordinary user account for that.
<h3>The default registry</h3>
A Windows registry contains many keys by default, and some of them are
necessary for even installers to operate correctly. The keys that the
Wine developers have found necessary to install applications are distributed
in a file called "winedefault.reg". It is automatically installed for you
if you use the tools/wineinstall script, but if you want to install it manually,
you can do so by using the regapi tool. You can find more information about
this in the documentation/no-windows document in the Wine distribution.
<h3>The [registry] section</h3>
With the above information fresh in mind, let's look at the wine.conf/.winerc
options for handling the registry.
LoadGlobalRegistryFiles
Controls whether to try to load the global registry files, if they exist.
LoadHomeRegistryFiles
Controls whether to try to load the user's registry files (in the .wine
subdirectory of the user's home directory).
LoadWindowsRegistryFiles
Controls whether Wine will attempt to load registry data from a real
Windows registry in an existing MS Windows installation.
WritetoHomeRegistryFiles
Controls whether registry data will be written to the user's registry
files. (Currently, there is no alternative, so if you turn this off, Wine
cannot save the registry on disk at all; after you exit Wine, your changes
will be lost.)
UseNewFormat
This option is obsolete. Wine now always use the new format; support
for the old format was removed a while ago.
PeriodicSave
If this option is set to a nonzero value, it specifies that you want
the registry to be saved to disk at the given interval. If it is not set,
the registry will only be saved to disk when the wineserver terminates.
SaveOnlyUpdatedKeys
Controls whether the entire registry is saved to the user's registry
files, or only subkeys the user have actually changed. Considering that
the user's registry will override any global registry files and
Windows registry files, it usually makes sense to only save user-modified
subkeys; that way, changes to the rest of the global or Windows registries
will still affect the user.
|