如何在初始化失败时恢复配置设置

时间:2015-01-23 10:17:21

标签: c# configuration

我的程序有一些应用程序设置和一些用户设置。在某些计算机上,我的用户设置配置文件已损坏并停止加载程序。然后我登录到机器并删除存储在的UserConfig目录 %USERPROFILE%\Appdata\Local\MyApp

当我的文件损坏时,抛出的错误是Configuration Settings Failed To Initialize所以我想知道是否在我的程序中发生了是否有办法删除损坏的文件并重置配置。

到目前为止,我有:

try
{
     var prop1= Settings.Default.prop1;
}
catch (Exception ex)
{
    var userSettingsLocation =
      Path.Combine(Environment.ExpandEnvironmentVariables(
        "%USERPROFILE%"), "AppData","Local", "MyApp");
    if (Directory.Exists(userSettingsLocation))
    {
      DeleteDirectory(userSettingsLocation); // This is a reccursive
                                             // delete method
      // I need to reload settings
    }
}

这会删除文件,但是如果我尝试再次使用例如Settings.Reset();读取我的设置,我仍然会收到相同的错误。删除损坏的文件后,我需要以某种方式重置配置设置。这可能吗?

2 个答案:

答案 0 :(得分:1)

如果有其他人想知道的话,那就是诀窍:

try
{
     var prop1= Settings.Default.prop1;
}
catch (Exception ex)
{
    var userSettingsLocation =
      Path.Combine(Environment.ExpandEnvironmentVariables(
        "%USERPROFILE%"), "AppData","Local", "MyApp");
    if (Directory.Exists(userSettingsLocation))
    {
         if (ex.InnerException is System.Configuration.ConfigurationException)
         {
             var settingsFile = (ex.InnerException as ConfigurationException).Filename;
             File.Delete(settingsFile);
             System.Windows.Forms.Application.Restart();
         }
    }
}

答案 1 :(得分:0)

编辑:经过一些试验,我认为您需要在删除错误的配置文件后重新启动应用程序。这是另一个SO线程:C# - User Settings broken

最后一个答案基本上是你可以使用的代码。


实际上我认为你必须在删除文件后调用Settings.Reset

顺便说一下,您应该使用异常详细信息来获取导致问题的配置文件名:

catch(Exception ex) 
{
    if(ex.InnerException is ConfigurationErrorsException)
    {

        var settingsFile = (e.InnerException as ConfigurationErrorsException).Filename;
        /* ....Your code... */

    }
}

string filename(()e.InnerException).Filename;