[fpc-pascal] Fpc Access Violation if AppConfigDir doesn't exist.
Giuliano Colla
giuliano.colla at fastwebnet.it
Sat Feb 9 01:49:49 CET 2013
Launching a Lazarus application in a freshly installed Linux system, I
found a condition which may be quite confusing for a normal user: the
main form was shown, the program didn't work, and there was no way to
close the form, which could only be closed by a killall from command line.
Launching from command line one could only see a
TApplication.HandleException Access Violation, which isn't much telling
for a normal user either.
It turned out that the reason was simply that the default AppConfigDir
(~/.config/ ) wasn't there, and therefore in the two usual lines
AppConfigFileName:= GetAppConfigFile(False);
ini := TIniFile.Create(AppConfigFileName);
the second line was generating the access violation.
Desktop specs tell where configuration data should go, but they don't
guarantee that the directory exists. Other applications take care of
creating if it doesn't exist, but its presence depends on which
applications you launch.
Of course, once one knows, one can use ForceDirectories in the
application code, but it would be much more user friendly if
XdgConfigHome (or SysConfigDir when it will be implemented) in sysutils
took care of that. You ask for the default configuration path to put
your data in, and you get a sane and *existing* path.
It would also be nice if TIniFile.Create didn't generate an Access
Violation if the file can't be created.
Should I open an issue on the bugtracker on this subject, or I'm the
only one to think that it's a bug/required feature?
Giuliano
More information about the fpc-pascal
mailing list