How do I restore a corrupted user.config file?

  • Thread starter Thread starter Jeremy Chaney
  • Start date Start date
J

Jeremy Chaney

It appears that my user.config file got corrupted causing my
"InitializeComponent" routine to throw the exception "Root element is
missing." when I start my app.

I figure I can just go into Explorer and delete the file to get things
working again, but I'd rather just catch the exception and resolve the
error programatically. I tried "Properties.Settings.Default.Reset();"
but that just throws the exception too. Does anyone know how I can
programatically get the user.config file back into a good state? The
path to the file looks like it is obfuscated (one of the folders in the
path contains the string "zc3rx3dim2uzbjjmpqetzf4h0qujaeb5"), so I don't
see trying to delete the file as a viable option.

Thanks,
--Jeremy
 
Hi Jeremy

Have you found any resolution to this issue? This seems to me to be a very
large flaw in the design of the application settings mechanism.

In my experience user settings files inevitably get corrupted at some stage
by users terminating application as it is writing the settings. You need to
have some ability to reset the settings in this instance. Unfortunately ,as
you noted, the path to the user.config file is somewhat cryptic. The
documented method of getting the path for the user.config file is to call:

Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
string path = config.FilePath;

However this also fails with an exception if the config file is corrupt.
 
Hi Jeremy

Have you found any resolution to this issue? This seems to me to be a very
large flaw in the design of the application settings mechanism.

In my experience user settings files inevitably get corrupted at some stage
by users terminating application as it is writing the settings. You need to
have some ability to reset the settings in this instance. Unfortunately ,as
you noted, the path to theuser.configfile is somewhat cryptic. The
documented method of getting the path for theuser.configfile is to call:

Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoa­mingAndLocal);
string path = config.FilePath;

However this also fails with an exception if the config file iscorrupt.

--
Grant Frisken
Infralutionwww.infralution.com







- Show quoted text -

catch the ConfiguarationErrorsException. Somethign like this.



catch (System.Configuration.ConfigurationErrorsException ex)
{
string fileName = "";
if (!string.IsNullOrEmpty(ex.Filename))
{
fileName = ex.Filename;
}
else
{

System.Configuration.ConfigurationErrorsException innerException =
ex.InnerException as
System.Configuration.ConfigurationErrorsException;
if (innerException != null && !
string.IsNullOrEmpty(innerException.Filename))
{
fileName = innerException.Filename;
}
}
if (System.IO.File.Exists(fileName))
{
System.IO.File.Delete(fileName);
}
UpgradeSettings();
}
 
catch the ConfiguarationErrorsException. Somethign like this.

catch (System.Configuration.ConfigurationErrorsException ex)
{
string fileName = "";
if (!string.IsNullOrEmpty(ex.Filename))
{
fileName = ex.Filename;
}
else
{

System.Configuration.ConfigurationErrorsException innerException =
ex.InnerException as
System.Configuration.ConfigurationErrorsException;
if (innerException != null && !
string.IsNullOrEmpty(innerException.Filename))
{
fileName = innerException.Filename;
}
}
if (System.IO.File.Exists(fileName))
{
System.IO.File.Delete(fileName);
}
UpgradeSettings();
}

Thanks - that gets me part way there. What does your UpgradeSettings
method do? I tried calling Upgrade, Reset and Reload on the
Properties.Settings.Default object after deleting the file. The first two
fail with the same exception. Reload doesn't fail - however if you try to
access a setting property after this it still fails. Does this mean that
the only option if this error occurs is to force the user to exit and restart?
 
Back
Top