[Lazarus] Cross-platform using TRegistry - how to?

Tony Whyman tony.whyman at mccallumwhyman.com
Mon May 4 11:41:27 CEST 2020


I often use TRegistry for cross-platform configuration data and you 
should be able to use it and avoid having to maintain different Linux 
and Windows versions.

Under Linux, you are using TXMLRegistry and this saves registry data in 
an application specific XML file. There can be both a common XML file 
(HKEY_LOCAL_MACHINE) and a per user XML file (HKEY_CURRENT_USER). The 
file's location is always relative to the path returned by 
Sysutils.GetAppConfigDir. I create separate TRegistry instances for 
HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER.

In the per user case, the filename is $HOME/.config/<vendor 
name>/<application name>/xml.reg, where the vendor and application names 
are set by the callbacks OnGetVendorName (default '') and 
OnGetApplicationName (default exe file name) in Sysutils.

Note that the HKEY_LOCAL_MACHINE xml file is probably in a read only 
location unless you are root.

Otherwise, you just keep the same keynames and values as in Windows 
registry. As reported elsewhere, if you insist on having more than one 
instance of TRegistry (for the same root key) at any one time, you 
cannot assume that the keyname is preserved when switching between 
TRegistry instances, and must (for now) always set the keyname before 
accessing a value.

On 03/05/2020 23:40, Bo Berglund via lazarus wrote:
> I am porting a Windows service application to Linux ARM (RPi4).
> The Windows version is a service and as such its config data resides
> in the Registry below HKLM.
> The Linux version will be a Daemon and I would like as much of the
> code stay unaltered to avoid conversion bugs.
>
> Now I have read that the FPC TRegistry class is able to use the
> original commands for reading/writing the data by instead using some
> form of ini- or xml-file store on UNIX.
>
> The existing system written in Delphi2007 uses the following key
> structure:
> HKLM\SOFTWARE\Companyname\Applicationname\Server\(named values)
> HKLM\SOFTWARE\Companyname\Applicationname\Configuration\(named values)
>
> But how does this work and where/how are the data actually stored in a
> Linux file system?
>
> I have tried to google this but my search skills are not good enough
> so I came up empty-handed....
>
> Any insight on this very much appreciated.
>


More information about the lazarus mailing list