private void UpgradeFromPreviousVersion() { try { // This works for both ClickOnce and non-ClickOnce applications, whereas // ApplicationDeployment.CurrentDeployment.DataDirectory only works for ClickOnce applications DirectoryInfo currentSettingsDir = new FileInfo(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath).Directory; if (currentSettingsDir == null) { throw new Exception("Failed to determine the location of the settings file."); } if (!currentSettingsDir.Exists) { currentSettingsDir.Create(); } // LINQ to Objects for .NET 2.0 courtesy of LINQBridge (linqbridge.googlecode.com) var previousSettings = (from dir in currentSettingsDir.Parent.GetDirectories() let dirVer = new { Dir = dir, Ver = new Version(dir.Name) } where dirVer.Ver < CurrentVersion orderby dirVer.Ver descending select dirVer).FirstOrDefault(); if (previousSettings == null) { return; } XmlElement userSettings = ReadUserSettings(previousSettings.Dir.GetFiles("user.config").Single().FullName); userSettings = SettingsUpgrader.Upgrade(userSettings, previousSettings.Ver); WriteUserSettings(userSettings, currentSettingsDir.FullName + @"\user.config", true); Reload(); } catch (Exception ex) { MessageBoxes.Alert(MessageBoxIcon.Error, "There was an error upgrading the the user settings from the previous version. The user settings will be reset.\n\n" + ex.Message); Default.Reset(); } }