Fixed issue where the settings from previous installations were not imported. Added more documentation.

Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
This commit is contained in:
Konstantina Chremmou 2022-01-24 19:55:38 +00:00
parent 2c18b7c7ed
commit bae03aff8b

View File

@ -69,15 +69,30 @@ namespace XenAdmin
private static Dictionary<string, string> VNCPasswords = new Dictionary<string, string>(); private static Dictionary<string, string> VNCPasswords = new Dictionary<string, string>();
/// <summary> /// <summary>
/// MSDN info regarding the path to the user.config file is somewhat confusing. It turns out /// MSDN info regarding the path to the user.config file is somewhat confusing.
/// it is not in Application.UserAppDataPath as stated on http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx /// It turns out it is not in Application.UserAppDataPath as stated on
/// but rather in a location like BasePath\CompanyName\AppName_EvidenceType_EvidenceHash\Version as described on /// http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx. As described on
/// http://stackoverflow.com/questions/1075204/when-using-a-settings-settings-file-in-net-where-is-the-config-actually-stored /// http://stackoverflow.com/questions/1075204/when-using-a-settings-settings-file-in-net-where-is-the-config-actually-stored
/// and on http://msdn.microsoft.com/en-us/library/ms379611.aspx. /// and on http://msdn.microsoft.com/en-us/library/ms379611.aspx, it is
/// Trying to retrieve the filename at the places where this method's caller caught the ConfigurationErrorsException /// ProfileDirectory\CompanyName\AppName_EvidenceType_EvidenceHash\Version\user.config
/// returns null, so this one has to be called. /// where
/// - ProfileDirectory: either the roaming profile directory or the local one.
/// Settings are stored by default in the local user.config file. To store a
/// setting in the roaming user.config file, you need to mark the setting with
/// the SettingsManageabilityAttribute with SettingsManageability set to Roaming.
/// - CompanyName: typically the string specified by the AssemblyCompanyAttribute
/// (with the caveat that the string is escaped and truncated as necessary, and if
/// not specified on the assembly, we have a fallback procedure).
/// - AppName: typically the string specified by the AssemblyProductAttribute
/// (same caveats as for company name).
/// - EvidenceType and EvidenceHash: information derived from the app domain evidence
/// to provide proper app domain and assembly isolation.
/// - Version: typically the version specified in the AssemblyVersionAttribute.
/// This is required to isolate different versions of the app deployed side by side.
/// - The file name is always simply 'user.config
/// Trying to retrieve the filename at the places where this method's caller caught
/// the ConfigurationErrorsException returns null, so this one has to be called.
/// </summary> /// </summary>
/// <returns></returns>
public static string GetUserConfigPath() public static string GetUserConfigPath()
{ {
try try
@ -642,7 +657,7 @@ namespace XenAdmin
// <Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config // <Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config
// Get a previous user.config file by enumerating through all the folders in <Profile Directory>\<Company Name> // Get a previous user.config file by enumerating through all the folders in <Profile Directory>\<Company Name>
var currentConfigFolder = new DirectoryInfo(Settings.GetUserConfigPath()).Parent; var currentConfigFolder = new DirectoryInfo(GetUserConfigPath()).Parent;
var companyFolder = currentConfigFolder?.Parent?.Parent; var companyFolder = currentConfigFolder?.Parent?.Parent;
if (companyFolder == null) if (companyFolder == null)
@ -651,11 +666,14 @@ namespace XenAdmin
FileInfo previousConfig = null; FileInfo previousConfig = null;
Version previousVersion = null; Version previousVersion = null;
Version currentVersion = Program.Version; Version currentVersion = Program.Version;
var appDomainName = AppDomain.CurrentDomain.FriendlyName;
foreach (var subDir in companyFolder.GetDirectories("*" + appDomainName + "*", SearchOption.AllDirectories)) var directories = companyFolder.GetDirectories($"{BrandManager.BrandConsoleNoSpace}*");
foreach (var dir in directories)
{ {
foreach (var file in subDir.GetFiles("user.config", SearchOption.AllDirectories)) var configFiles = dir.GetFiles("user.config", SearchOption.AllDirectories);
foreach (var file in configFiles)
{ {
var configFolderName = Path.GetFileName(Path.GetDirectoryName(file.FullName)); var configFolderName = Path.GetFileName(Path.GetDirectoryName(file.FullName));
if (configFolderName != null) if (configFolderName != null)