[GNC] How to run GNUcash in portable fashion?

Geert Janssens geert.gnucash at kobaltwit.be
Fri Oct 26 14:24:22 EDT 2018


Op vrijdag 26 oktober 2018 18:52:33 CEST schreef aeneas:
> One of the nice things about software designed to run on multiple platforms
> is that it tends to avoid the use of platform specific features.  I've had
> very good success setting up various open source packages to run on Windows
> in a portable fashion.  While the  Portable Apps
> <https://portableapps.com/apps>   offering has some very nice capabilities
> there are a couple of issues that cause me to like my own method better.
> One of these is the slowness with which new releases get transitioned to
> their platform, which is the current case with GNUcash Version 3.3.
> 
> I've attempted to setup GNUcash to run flash memory in a manner that it can
> be easily taken from one computer to another.  Coincidentally it looks like
> GNUcash made a change in Version 3.3 that should make this work well.  I
> noticed that the files used for storing persistent state information have
> been moved from a folder named ".gnucash" which was located in the folder
> referenced by the Windows environment variable named "%HOMEPATH%" to the
> folder referenced by the Windows environment variable named "%APPDATA%".
> The problem is that it appears as though GNUcash does not bother to use
> these environment variables but rather hard codes the folder names using
> absolute paths assigned to the "C:\" drive with the default values for the
> paths that Windows normally assigns to the indicated variables.
> 
No, GnuCash calls SHGetSpecialFolderLocation (NULL, CSIDL_APPDATA, &pidl);
See https://github.com/Gnucash/gnucash/blob/3.3/libgnucash/core-utils/gnc-filepath-utils.cpp#L486

While deprecated this is one way to retrieve that current APPDATA directory 
via the Windows API. I don't know if that function considers environment 
variables though.

> Of course the reason for having these variables is so that the paths can be
> changed external to the software that needs to use such storage.  I cannot
> think of a good reason for using these paths but ignoring the variables.

The environment variables are a Windows thing. It's not clear to me whether 
applications are supposed to explicitly prefer them over whatever is returned 
by the Windows API. If you can point me to Microsoft guidelines in this 
respect we can evaluate this.


> Rather if GNUcash did use these variables I suspect that it might work vary
> well from a portable drive that could be used on different computers.  Is
> there any chance that GNUcash might consider doing something as normal as
> this?
> 
Well, we haven't established yet whether this is the "normal" thing to do.

However I sympathize with your use case. You can handle it partly by setting 
GNC_DATA_HOME to the location where you want to store your data.

However this will only handle part of the metadata and configuration files. 
If you have created your own guile based reports ("custom reports") or want to 
customize the gnucash gui, these files are stored in a directory that's 
internally known as "GNC_CONFIG_HOME". Unlike GNC_DATA_HOME this one can't be 
moved (yet) due to some oversight while implementing these changes. It is 
hardcoded to be APPDATA\GnuCash, with APPDATA retrieved as explained above.

Note that this would still not be completely portable. Part of GnuCash' 
preferences are stored in the registry. So when moving to another PC, you'll 
lose these preferences. Altering them will taint the registry on that PC, 
which is not truly portable. Unless of course you also have a mechanism to 
redirect registry trees to a local file. I don't know enough of Windows to 
estimate if this is possible.

Next, GnuCash depends on aqbanking. This has its own configuration directory 
in the user's home directory. If you use aqbanking you may want to set 
AQBANKING_HOME as well.

Regards,

Geert




More information about the gnucash-user mailing list