mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-12-30 07:40:13 +01:00
592077b6c6
When running XenCenter after a new installation, and the program's hash has changed (e.g. by .NET 4.0 upgrade), the previous settings are not automatically restored because they cannot be found (they are there, but in different folder). We need to try and locate a config file from a previous installation, and if found, update the settings from there. Signed-off-by: Mihaela Stoica <mihaela.stoica@citrix.com>
82 lines
3.0 KiB
C#
82 lines
3.0 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using XenAdmin;
|
|
using System.IO;
|
|
|
|
public static class SettingsUpdate
|
|
{
|
|
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
|
|
// The path of the user.config files looks something like this:
|
|
// <Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config
|
|
|
|
/// <summary>
|
|
/// Looks for a config file from a previous installation of the application and updates the settings from it.
|
|
/// </summary>
|
|
public static void Update()
|
|
{
|
|
try
|
|
{
|
|
Assembly a = Assembly.GetExecutingAssembly();
|
|
Version appVersion = a.GetName().Version;
|
|
|
|
// get previous config file by enumerating through all the folders in <Profile Directory>\<Company Name>
|
|
// to find a previous user.config file
|
|
|
|
var currentConfigFolder = new DirectoryInfo(Settings.GetUserConfigPath()).Parent;
|
|
|
|
if (currentConfigFolder == null)
|
|
return;
|
|
|
|
var appDomainName = AppDomain.CurrentDomain.FriendlyName;
|
|
var companyFolder = currentConfigFolder.Parent != null ? currentConfigFolder.Parent.Parent : null;
|
|
|
|
if (companyFolder == null)
|
|
return;
|
|
|
|
FileInfo previousConfig = null;
|
|
Version previousVersion = null;
|
|
|
|
foreach (var subDir in companyFolder.GetDirectories("*" + appDomainName + "*", SearchOption.AllDirectories))
|
|
{
|
|
foreach (var file in subDir.GetFiles("user.config", SearchOption.AllDirectories))
|
|
{
|
|
var configFolderName = Path.GetFileName(Path.GetDirectoryName(file.FullName));
|
|
if (configFolderName != null)
|
|
{
|
|
var configVersion = new Version(configFolderName);
|
|
|
|
if ((configVersion <= appVersion) && (previousVersion == null || configVersion > previousVersion))
|
|
{
|
|
previousVersion = configVersion;
|
|
previousConfig = file;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (previousConfig != null)
|
|
{
|
|
// copy previous config file to current config location
|
|
var destinationFile = Path.GetDirectoryName(currentConfigFolder.FullName);
|
|
|
|
destinationFile = Path.Combine(destinationFile, previousVersion.ToString());
|
|
|
|
if (!Directory.Exists(destinationFile))
|
|
Directory.CreateDirectory(destinationFile);
|
|
|
|
destinationFile = Path.Combine(destinationFile, previousConfig.Name);
|
|
|
|
File.Copy(previousConfig.FullName, destinationFile);
|
|
|
|
// upgrade settings
|
|
XenAdmin.Properties.Settings.Default.Upgrade();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.DebugFormat("Exception while updating settings: {0}", ex.Message);
|
|
}
|
|
}
|
|
}
|