From aa265bfbb6e8e1893d04ea24ad6d40cda16f5fdd Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Mon, 20 Dec 2021 00:27:32 +1000 Subject: [PATCH] Auto Process Tweaks --- src/ARKServerManager/ARKServerManager.csproj | 45 ++++-- src/ARKServerManager/App.config | 10 +- src/ARKServerManager/Config.Designer.cs | 22 +-- src/ARKServerManager/Config.settings | 10 +- src/ARKServerManager/Lib/ServerApp.cs | 133 +++++++++--------- src/ARKServerManager/Lib/ServerRuntime.cs | 19 +-- .../Utils/DiscordBotHelper.cs | 10 +- .../Windows/ShutdownWindow.xaml.cs | 5 +- .../ConanServerManager.csproj | 45 ++++-- src/ConanServerManager/Lib/ServerApp.cs | 98 +++++++------ src/Server-Managers.sln | 105 ++++++++++++++ 11 files changed, 321 insertions(+), 181 deletions(-) diff --git a/src/ARKServerManager/ARKServerManager.csproj b/src/ARKServerManager/ARKServerManager.csproj index bd490e4e..e766e281 100644 --- a/src/ARKServerManager/ARKServerManager.csproj +++ b/src/ARKServerManager/ARKServerManager.csproj @@ -53,6 +53,42 @@ 4 false + + true + bin\Debug - Beta\ + TRACE;DEBUG + full + AnyCPU + 7.3 + prompt + + + true + bin\Debug + TRACE;DEBUG + full + AnyCPU + 7.3 + prompt + + + true + bin\Debug + TRACE;DEBUG + full + AnyCPU + 7.3 + prompt + + + true + bin\Debug + TRACE;DEBUG + full + AnyCPU + 7.3 + prompt + AnyCPU none @@ -97,15 +133,6 @@ - - true - bin\Debug - Beta\ - TRACE;DEBUG - full - AnyCPU - 7.3 - prompt - true diff --git a/src/ARKServerManager/App.config b/src/ARKServerManager/App.config index b42991d0..1a23590c 100644 --- a/src/ARKServerManager/App.config +++ b/src/ARKServerManager/App.config @@ -33,7 +33,7 @@ +login anonymous +quit - +force_install_dir "{0}" +login anonymous "+app_update 376030 {1} {2}" +quit + +force_install_dir "{1}" +login {0} "+app_update {2} {3} {4}" +quit Servers @@ -101,9 +101,6 @@ http://arkservermanager.freeforums.net/thread/1194/faq-frequently-asked - - +force_install_dir "{0}" +login anonymous "+app_update 445400 {1} {2}" +quit - https://survivetheark.com/index.php?/forums/forum/5-changelog-patch-notes/ @@ -123,7 +120,7 @@ RunServer.cmd - +login {0} +workshop_download_item 346110 {1} +quit + +login {0} +workshop_download_item {1} {2} +quit steamapps\workshop\content\346110\ @@ -152,9 +149,6 @@ appworkshop_346110.acf - - +login {0} +workshop_download_item 407530 {1} +quit - appworkshop_407530.acf diff --git a/src/ARKServerManager/Config.Designer.cs b/src/ARKServerManager/Config.Designer.cs index 70017c1f..cd49e43b 100644 --- a/src/ARKServerManager/Config.Designer.cs +++ b/src/ARKServerManager/Config.Designer.cs @@ -82,7 +82,7 @@ namespace ServerManagerTool { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("+force_install_dir \"{0}\" +login anonymous \"+app_update 376030 {1} {2}\" +quit")] + [global::System.Configuration.DefaultSettingValueAttribute("+force_install_dir \"{1}\" +login {0} \"+app_update {2} {3} {4}\" +quit")] public string SteamCmdInstallServerArgsFormat { get { return ((string)(this["SteamCmdInstallServerArgsFormat"])); @@ -576,15 +576,6 @@ namespace ServerManagerTool { } } - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("+force_install_dir \"{0}\" +login anonymous \"+app_update 445400 {1} {2}\" +quit")] - public string SteamCmdInstallServerArgsFormat_SotF { - get { - return ((string)(this["SteamCmdInstallServerArgsFormat_SotF"])); - } - } - [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("https://survivetheark.com/index.php?/forums/forum/5-changelog-patch-notes/")] @@ -751,7 +742,7 @@ namespace ServerManagerTool { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("+login {0} +workshop_download_item 346110 {1} +quit")] + [global::System.Configuration.DefaultSettingValueAttribute("+login {0} +workshop_download_item {1} {2} +quit")] public string SteamCmdInstallModArgsFormat { get { return ((string)(this["SteamCmdInstallModArgsFormat"])); @@ -1127,15 +1118,6 @@ namespace ServerManagerTool { } } - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("+login {0} +workshop_download_item 407530 {1} +quit")] - public string SteamCmdInstallModArgsFormat_SotF { - get { - return ((string)(this["SteamCmdInstallModArgsFormat_SotF"])); - } - } - [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("appworkshop_407530.acf")] diff --git a/src/ARKServerManager/Config.settings b/src/ARKServerManager/Config.settings index 6923dd2d..b1e91d4f 100644 --- a/src/ARKServerManager/Config.settings +++ b/src/ARKServerManager/Config.settings @@ -21,7 +21,7 @@ - +force_install_dir "{0}" +login anonymous "+app_update 376030 {1} {2}" +quit + +force_install_dir "{1}" +login {0} "+app_update {2} {3} {4}" +quit Servers @@ -161,9 +161,6 @@ 1000 - - +force_install_dir "{0}" +login anonymous "+app_update 445400 {1} {2}" +quit - https://survivetheark.com/index.php?/forums/forum/5-changelog-patch-notes/ @@ -210,7 +207,7 @@ RunServer.cmd - +login {0} +workshop_download_item 346110 {1} +quit + +login {0} +workshop_download_item {1} {2} +quit steamapps\workshop\content\346110\ @@ -311,9 +308,6 @@ False - - +login {0} +workshop_download_item 407530 {1} +quit - appworkshop_407530.acf diff --git a/src/ARKServerManager/Lib/ServerApp.cs b/src/ARKServerManager/Lib/ServerApp.cs index ea1d1f97..5875111f 100644 --- a/src/ARKServerManager/Lib/ServerApp.cs +++ b/src/ARKServerManager/Lib/ServerApp.cs @@ -221,7 +221,7 @@ namespace ServerManagerTool.Lib ExitCode = EXITCODE_NORMALEXIT; } - private void ShutdownServer(bool restartServer, bool updateServer, CancellationToken cancellationToken) + private void ShutdownServer(bool restartServer, bool updateServer, bool steamCmdRemoveQuit, CancellationToken cancellationToken) { if (_profile == null) { @@ -274,7 +274,7 @@ namespace ServerManagerTool.Lib try { ServerStatusChangeCallback?.Invoke(ServerStatus.Updating); - UpgradeLocal(true, true, cancellationToken); + UpgradeLocal(true, true, steamCmdRemoveQuit, cancellationToken); } finally { @@ -729,7 +729,7 @@ namespace ServerManagerTool.Lib ExitCode = EXITCODE_SHUTDOWN_TIMEOUT; } - private void UpgradeLocal(bool validate, bool updateMods, CancellationToken cancellationToken) + private void UpgradeLocal(bool validate, bool updateMods, bool steamCmdRemoveQuit, CancellationToken cancellationToken) { if (_profile == null) { @@ -777,10 +777,12 @@ namespace ServerManagerTool.Lib } } - var steamCmdInstallServerArgsFormat = _profile.SotFEnabled ? Config.Default.SteamCmdInstallServerArgsFormat_SotF : Config.Default.SteamCmdInstallServerArgsFormat; - var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, _profile.InstallDirectory, string.Empty, validate ? "validate" : string.Empty); + var steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, Config.Default.SteamCmdInstallServerArgsFormat, Config.Default.SteamCmd_AnonymousUsername, _profile.InstallDirectory, string.Empty, _profile.SotFEnabled ? Config.Default.AppIdServer_SotF : Config.Default.AppIdServer, string.Empty, validate ? "validate" : string.Empty); var workingDirectory = Config.Default.DataDir; + if (steamCmdRemoveQuit) + SteamCMDProcessWindowStyle = ProcessWindowStyle.Normal; + success = ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, workingDirectory, null, null, _profile.InstallDirectory, Config.Default.SteamCmdRedirectOutput ? (DataReceivedEventHandler)serverOutputHandler : null, cancellationToken, SteamCMDProcessWindowStyle).Result; if (success && downloadSuccessful) { @@ -942,20 +944,10 @@ namespace ServerManagerTool.Lib LogProfileMessage("Starting mod download.\r\n"); steamCmdArgs = string.Empty; - if (_profile.SotFEnabled) - { - if (Config.Default.SteamCmd_UseAnonymousCredentials) - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat_SotF, Config.Default.SteamCmd_AnonymousUsername, modId); - else - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat_SotF, Config.Default.SteamCmd_Username, modId); - } + if (Config.Default.SteamCmd_UseAnonymousCredentials) + steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_AnonymousUsername, _profile.SotFEnabled ? Config.Default.AppId_SotF : Config.Default.AppId, modId); else - { - if (Config.Default.SteamCmd_UseAnonymousCredentials) - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_AnonymousUsername, modId); - else - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_Username, modId); - } + steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_Username, _profile.SotFEnabled ? Config.Default.AppId_SotF : Config.Default.AppId, modId); modSuccess = ServerUpdater.UpgradeModsAsync(steamCmdFile, steamCmdArgs, workingDirectory, null, null, Config.Default.SteamCmdRedirectOutput ? modOutputHandler : null, cancellationToken, SteamCMDProcessWindowStyle).Result; if (modSuccess && downloadSuccessful) @@ -1259,7 +1251,7 @@ namespace ServerManagerTool.Lib { // perform a steamcmd validate to confirm all the files LogProfileMessage("Validating server files (*new*)."); - UpgradeLocal(true, false, CancellationToken.None); + UpgradeLocal(true, false, false, CancellationToken.None); LogProfileMessage("Validated server files (*new*)."); } @@ -1606,9 +1598,9 @@ namespace ServerManagerTool.Lib // update the mod cache var steamCmdArgs = string.Empty; if (Config.Default.SteamCmd_UseAnonymousCredentials) - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_AnonymousUsername, modId); + steamCmdArgs = SteamUtils.BuildSteamCmdArguments(false, Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_AnonymousUsername, Config.Default.AppId, modId); else - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_Username, modId); + steamCmdArgs = SteamUtils.BuildSteamCmdArguments(false, Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_Username, Config.Default.AppId, modId); var workingDirectory = Config.Default.DataDir; var success = ServerUpdater.UpgradeModsAsync(steamCmdFile, steamCmdArgs, workingDirectory, null, null, Config.Default.SteamCmdRedirectOutput ? modOutputHandler : null, CancellationToken.None, SteamCMDProcessWindowStyle).Result; @@ -1727,8 +1719,7 @@ namespace ServerManagerTool.Lib // update the server cache var validate = Config.Default.AutoUpdate_ValidateServerFiles; - var steamCmdInstallServerArgsFormat = Config.Default.SteamCmdInstallServerArgsFormat; - var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, cacheFolder, steamCmdInstallServerBetaArgs, validate ? "validate" : string.Empty); + var steamCmdArgs = SteamUtils.BuildSteamCmdArguments(false, Config.Default.SteamCmdInstallServerArgsFormat, Config.Default.SteamCmd_AnonymousUsername, cacheFolder, Config.Default.AppIdServer, steamCmdInstallServerBetaArgs.ToString(), validate ? "validate" : string.Empty); var workingDirectory = Config.Default.DataDir; var success = ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, workingDirectory, null, null, cacheFolder, Config.Default.SteamCmdRedirectOutput ? serverOutputHandler : null, CancellationToken.None, SteamCMDProcessWindowStyle).Result; @@ -1905,20 +1896,23 @@ namespace ServerManagerTool.Lib LogProfileMessage("Delete old profile backup files started..."); var backupFolder = GetProfileBackupFolder(_profile); - var backupFileFilter = $"*{Config.Default.BackupExtension}"; - var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); - - var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); - foreach (var backupFile in backupFiles) + if (Directory.Exists(backupFolder)) { - try + var backupFileFilter = $"*{Config.Default.BackupExtension}"; + var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); + + var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); + foreach (var backupFile in backupFiles) { - LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); - backupFile.Delete(); - } - catch - { - // if unable to delete, do not bother + try + { + LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); + backupFile.Delete(); + } + catch + { + // if unable to delete, do not bother + } } } } @@ -1935,11 +1929,13 @@ namespace ServerManagerTool.Lib try { var backupFolder = GetProfileBackupFolder(_profile); - - var oldBackupFolders = new DirectoryInfo(backupFolder).GetDirectories(); - foreach (var oldBackupFolder in oldBackupFolders) + if (Directory.Exists(backupFolder)) { - oldBackupFolder.Delete(true); + var oldBackupFolders = new DirectoryInfo(backupFolder).GetDirectories(); + foreach (var oldBackupFolder in oldBackupFolders) + { + oldBackupFolder.Delete(true); + } } } catch @@ -2100,21 +2096,24 @@ namespace ServerManagerTool.Lib LogProfileMessage("Delete old server backup files started..."); var backupFolder = GetServerBackupFolder(_profile); - var mapName = ServerProfile.GetProfileMapFileName(_profile.ServerMap, _profile.PGM_Enabled, _profile.PGM_Name); - var backupFileFilter = $"{mapName}_*{Config.Default.BackupExtension}"; - var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); - - var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); - foreach (var backupFile in backupFiles) + if (Directory.Exists(backupFolder)) { - try + var mapName = ServerProfile.GetProfileMapFileName(_profile.ServerMap, _profile.PGM_Enabled, _profile.PGM_Name); + var backupFileFilter = $"{mapName}_*{Config.Default.BackupExtension}"; + var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); + + var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); + foreach (var backupFile in backupFiles) { - LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); - backupFile.Delete(); - } - catch - { - // if unable to delete, do not bother + try + { + LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); + backupFile.Delete(); + } + catch + { + // if unable to delete, do not bother + } } } } @@ -2449,6 +2448,9 @@ namespace ServerManagerTool.Lib var profiles = new Dictionary(); + ServerRuntime.EnableUpdateModStatus = false; + ServerProfile.EnableServerFilesWatcher = false; + foreach (var profileFile in Directory.EnumerateFiles(Config.Default.ConfigDirectory, "*" + Config.Default.ProfileExtension)) { try @@ -2784,7 +2786,7 @@ namespace ServerManagerTool.Lib return ExitCode; } - public int PerformProfileShutdown(ServerProfileSnapshot profile, bool performRestart, bool performUpdate, bool checkGracePeriod, CancellationToken cancellationToken) + public int PerformProfileShutdown(ServerProfileSnapshot profile, bool performRestart, bool performUpdate, bool checkGracePeriod, bool steamCmdRemoveQuit, CancellationToken cancellationToken) { _profile = profile; @@ -2817,7 +2819,7 @@ namespace ServerManagerTool.Lib // check if the mutex was established if (createdNew) { - ShutdownServer(performRestart, performUpdate, cancellationToken); + ShutdownServer(performRestart, performUpdate, steamCmdRemoveQuit, cancellationToken); if (ExitCode != EXITCODE_NORMALEXIT) { @@ -2893,7 +2895,10 @@ namespace ServerManagerTool.Lib var createdNew = false; if (OutputLogs) + { + _loggerBranch = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}", $"BranchUpdate_{GetBranchName(branch.BranchName)}"); _loggerProfile = GetLogger(GetProfileLogFolder(profile.ProfileId, LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}_{profile.ProfileId}", "Update"); + } try { @@ -2952,6 +2957,7 @@ namespace ServerManagerTool.Lib } } + LogProfileMessage(""); LogProfileMessage($"Exitcode = {ExitCode}"); return ExitCode; } @@ -2967,11 +2973,11 @@ namespace ServerManagerTool.Lib var createdNew = false; if (OutputLogs) - _loggerBranch = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}_{GetBranchName(branch.BranchName)}", $"Update_{GetBranchName(branch.BranchName)}"); + _loggerBranch = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}", $"BranchUpdate_{GetBranchName(branch.BranchName)}"); try { - LogBranchMessage(branch.BranchName, $"Started branch update process."); + LogMessage($"[{GetBranchName(branch.BranchName)}] Started branch update process."); var cacheFolder = GetServerCacheFolder(branch.BranchName); @@ -3017,7 +3023,7 @@ namespace ServerManagerTool.Lib else { var delay = 0; - foreach (var profile in _profiles.Keys.Where(p => p.EnableAutoUpdate)) + foreach (var profile in profiles) { if (delay > 0) Task.Delay(delay * 1000).Wait(); @@ -3039,12 +3045,12 @@ namespace ServerManagerTool.Lib ExitCode = EXITCODE_EXITWITHERRORS; } - LogBranchMessage(branch.BranchName, $"Finished branch update process."); + LogMessage($"[{GetBranchName(branch.BranchName)}] Finished branch update process."); } else { ExitCode = EXITCODE_PROCESSALREADYRUNNING; - LogBranchMessage(branch.BranchName, "Cancelled branch update process, could not lock branch folder."); + LogMessage($"[{GetBranchName(branch.BranchName)}] Cancelled branch update process, could not lock branch folder."); } } catch (Exception ex) @@ -3076,6 +3082,7 @@ namespace ServerManagerTool.Lib } } + LogBranchMessage(branch.BranchName, ""); LogBranchMessage(branch.BranchName, $"Exitcode = {ExitCode}"); return ExitCode; } @@ -3084,7 +3091,7 @@ namespace ServerManagerTool.Lib { int exitCode = EXITCODE_NORMALEXIT; - _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOBACKUP), LOGPREFIX_AUTOBACKUP, "Backup"); + _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOBACKUP), LOGPREFIX_AUTOBACKUP, "AutoBackup"); try { @@ -3133,7 +3140,7 @@ namespace ServerManagerTool.Lib { int exitCode = EXITCODE_NORMALEXIT; - _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOSHUTDOWN), LOGPREFIX_AUTOSHUTDOWN, "Shutdown"); + _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOSHUTDOWN), LOGPREFIX_AUTOSHUTDOWN, "AutoShutdown"); try { @@ -3194,7 +3201,7 @@ namespace ServerManagerTool.Lib ServerProcess = type, SteamCMDProcessWindowStyle = ProcessWindowStyle.Hidden }; - exitCode = app.PerformProfileShutdown(profile, performRestart, performUpdate, true, CancellationToken.None); + exitCode = app.PerformProfileShutdown(profile, performRestart, performUpdate, true, false, CancellationToken.None); if (profile.ServerUpdated) { @@ -3217,7 +3224,7 @@ namespace ServerManagerTool.Lib Mutex mutex = null; bool createdNew = false; - _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), LOGPREFIX_AUTOUPDATE, "Update"); + _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), LOGPREFIX_AUTOUPDATE, "AutoUpdate"); try { diff --git a/src/ARKServerManager/Lib/ServerRuntime.cs b/src/ARKServerManager/Lib/ServerRuntime.cs index 93d5c962..9557031b 100644 --- a/src/ARKServerManager/Lib/ServerRuntime.cs +++ b/src/ARKServerManager/Lib/ServerRuntime.cs @@ -597,8 +597,7 @@ namespace ServerManagerTool.Lib }; var steamCmdRemoveQuit = CommonConfig.Default.SteamCmdRemoveQuit && !Config.Default.SteamCmdRedirectOutput; - var steamCmdInstallServerArgsFormat = this.ProfileSnapshot.SotFEnabled ? Config.Default.SteamCmdInstallServerArgsFormat_SotF : Config.Default.SteamCmdInstallServerArgsFormat; - var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, this.ProfileSnapshot.InstallDirectory, steamCmdInstallServerBetaArgs, validate ? "validate" : string.Empty); + var steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, Config.Default.SteamCmdInstallServerArgsFormat, Config.Default.SteamCmd_AnonymousUsername, this.ProfileSnapshot.InstallDirectory, Config.Default.AppIdServer, steamCmdInstallServerBetaArgs.ToString(), validate ? "validate" : string.Empty); var workingDirectory = Config.Default.DataDir; success = await ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, workingDirectory, null, null, this.ProfileSnapshot.InstallDirectory, Config.Default.SteamCmdRedirectOutput ? serverOutputHandler : null, cancellationToken, steamCmdRemoveQuit ? ProcessWindowStyle.Normal : ProcessWindowStyle.Minimized); @@ -776,20 +775,10 @@ namespace ServerManagerTool.Lib var steamCmdArgs = string.Empty; var steamCmdRemoveQuit = CommonConfig.Default.SteamCmdRemoveQuit && !Config.Default.SteamCmdRedirectOutput; - if (this.ProfileSnapshot.SotFEnabled) - { - if (Config.Default.SteamCmd_UseAnonymousCredentials) - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat_SotF, Config.Default.SteamCmd_AnonymousUsername, modId); - else - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat_SotF, Config.Default.SteamCmd_Username, modId); - } + if (Config.Default.SteamCmd_UseAnonymousCredentials) + steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_AnonymousUsername, this.ProfileSnapshot.SotFEnabled ? Config.Default.AppId_SotF : Config.Default.AppId, modId); else - { - if (Config.Default.SteamCmd_UseAnonymousCredentials) - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_AnonymousUsername, modId); - else - steamCmdArgs = string.Format(Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_Username, modId); - } + steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, Config.Default.SteamCmdInstallModArgsFormat, Config.Default.SteamCmd_Username, this.ProfileSnapshot.SotFEnabled ? Config.Default.AppId_SotF : Config.Default.AppId, modId); var workingDirectory = Config.Default.DataDir; modSuccess = await ServerUpdater.UpgradeModsAsync(steamCmdFile, steamCmdArgs, workingDirectory, null, null, Config.Default.SteamCmdRedirectOutput ? modOutputHandler : null, cancellationToken, steamCmdRemoveQuit ? ProcessWindowStyle.Normal : ProcessWindowStyle.Minimized); diff --git a/src/ARKServerManager/Utils/DiscordBotHelper.cs b/src/ARKServerManager/Utils/DiscordBotHelper.cs index 2be3927b..ca15eca6 100644 --- a/src/ARKServerManager/Utils/DiscordBotHelper.cs +++ b/src/ARKServerManager/Utils/DiscordBotHelper.cs @@ -415,7 +415,7 @@ namespace ServerManagerTool.Utils task = Task.Run(() => { - app.PerformProfileShutdown(profile, true, false, false, token); + app.PerformProfileShutdown(profile, true, false, false, false, token); _currentProfileCommands.Remove(key); }); @@ -516,7 +516,7 @@ namespace ServerManagerTool.Utils task = Task.Run(() => { - app.PerformProfileShutdown(profile, false, false, false, token); + app.PerformProfileShutdown(profile, false, false, false, false, token); _currentProfileCommands.Remove(key); }); @@ -618,7 +618,7 @@ namespace ServerManagerTool.Utils task = Task.Run(() => { - app.PerformProfileShutdown(profile, false, false, false, token); + app.PerformProfileShutdown(profile, false, false, false, false, token); _currentProfileCommands.Remove(key); }); @@ -720,7 +720,7 @@ namespace ServerManagerTool.Utils task = Task.Run(() => { - app.PerformProfileShutdown(profile, true, false, false, token); + app.PerformProfileShutdown(profile, true, false, false, false, token); _currentProfileCommands.Remove(key); }); @@ -824,7 +824,7 @@ namespace ServerManagerTool.Utils task = Task.Run(() => { - app.PerformProfileShutdown(profile, performRestart, true, false, token); + app.PerformProfileShutdown(profile, performRestart, true, false, false, token); _currentProfileCommands.Remove(key); }); diff --git a/src/ARKServerManager/Windows/ShutdownWindow.xaml.cs b/src/ARKServerManager/Windows/ShutdownWindow.xaml.cs index 1bb98929..517b6486 100644 --- a/src/ARKServerManager/Windows/ShutdownWindow.xaml.cs +++ b/src/ARKServerManager/Windows/ShutdownWindow.xaml.cs @@ -1,4 +1,5 @@ -using ServerManagerTool.Common.Utils; +using ServerManagerTool.Common; +using ServerManagerTool.Common.Utils; using ServerManagerTool.Enums; using ServerManagerTool.Lib; using ServerManagerTool.Plugin.Common; @@ -243,7 +244,7 @@ namespace ServerManagerTool _shutdownCancellationSource = new CancellationTokenSource(); - var exitCode = await Task.Run(() => app.PerformProfileShutdown(profile, restartServer, updateServer, false, _shutdownCancellationSource.Token)); + var exitCode = await Task.Run(() => app.PerformProfileShutdown(profile, restartServer, updateServer, false, CommonConfig.Default.SteamCmdRemoveQuit, _shutdownCancellationSource.Token)); if (exitCode != ServerApp.EXITCODE_NORMALEXIT && exitCode != ServerApp.EXITCODE_CANCELLED) throw new ApplicationException($"An error occured during the shutdown process - ExitCode: {exitCode}"); diff --git a/src/ConanServerManager/ConanServerManager.csproj b/src/ConanServerManager/ConanServerManager.csproj index 2cb68cae..e7439e3d 100644 --- a/src/ConanServerManager/ConanServerManager.csproj +++ b/src/ConanServerManager/ConanServerManager.csproj @@ -53,6 +53,42 @@ 4 false + + true + bin\Debug - Beta\ + DEBUG;TRACE + full + AnyCPU + 7.3 + prompt + + + true + bin\Debug + TRACE;DEBUG + full + AnyCPU + 7.3 + prompt + + + true + bin\Debug + TRACE;DEBUG + full + AnyCPU + 7.3 + prompt + + + true + bin\Debug + TRACE;DEBUG + full + AnyCPU + 7.3 + prompt + AnyCPU none @@ -87,15 +123,6 @@ false - - true - bin\Debug - Beta\ - DEBUG;TRACE - full - AnyCPU - 7.3 - prompt - ..\packages\DotNetZip.1.13.8\lib\net40\DotNetZip.dll diff --git a/src/ConanServerManager/Lib/ServerApp.cs b/src/ConanServerManager/Lib/ServerApp.cs index f44a1369..1f2f2410 100644 --- a/src/ConanServerManager/Lib/ServerApp.cs +++ b/src/ConanServerManager/Lib/ServerApp.cs @@ -342,7 +342,7 @@ namespace ServerManagerTool.Lib var startInfo = new ProcessStartInfo() { FileName = GetLauncherFile(), - UseShellExecute = false, + UseShellExecute = true, }; process = Process.Start(startInfo); @@ -735,8 +735,7 @@ namespace ServerManagerTool.Lib } } - var steamCmdInstallServerArgsFormat = Config.Default.SteamCmdInstallServerArgsFormat; - var steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, steamCmdInstallServerArgsFormat, Config.Default.SteamCmd_AnonymousUsername, _profile.InstallDirectory, string.Empty, Config.Default.AppIdServer, string.Empty, validate ? "validate" : string.Empty); + var steamCmdArgs = SteamUtils.BuildSteamCmdArguments(steamCmdRemoveQuit, Config.Default.SteamCmdInstallServerArgsFormat, Config.Default.SteamCmd_AnonymousUsername, _profile.InstallDirectory, string.Empty, Config.Default.AppIdServer, string.Empty, validate ? "validate" : string.Empty); var workingDirectory = Config.Default.DataPath; if (steamCmdRemoveQuit) @@ -1675,8 +1674,7 @@ namespace ServerManagerTool.Lib // update the server cache var validate = Config.Default.AutoUpdate_ValidateServerFiles; - var steamCmdInstallServerArgsFormat = Config.Default.SteamCmdInstallServerArgsFormat; - var steamCmdArgs = SteamUtils.BuildSteamCmdArguments(false, steamCmdInstallServerArgsFormat, Config.Default.SteamCmd_AnonymousUsername, cacheFolder, Config.Default.AppIdServer, steamCmdInstallServerBetaArgs.ToString(), validate ? "validate" : string.Empty); + var steamCmdArgs = SteamUtils.BuildSteamCmdArguments(false, Config.Default.SteamCmdInstallServerArgsFormat, Config.Default.SteamCmd_AnonymousUsername, cacheFolder, Config.Default.AppIdServer, steamCmdInstallServerBetaArgs.ToString(), validate ? "validate" : string.Empty); var workingDirectory = Config.Default.DataPath; var success = ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, workingDirectory, null, null, cacheFolder, Config.Default.SteamCmdRedirectOutput ? serverOutputHandler : null, CancellationToken.None, SteamCMDProcessWindowStyle).Result; @@ -1813,20 +1811,23 @@ namespace ServerManagerTool.Lib LogProfileMessage("Delete old profile backup files started..."); var backupFolder = GetProfileBackupFolder(_profile); - var backupFileFilter = $"*{Config.Default.BackupExtension}"; - var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); - - var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); - foreach (var backupFile in backupFiles) + if (Directory.Exists(backupFolder)) { - try + var backupFileFilter = $"*{Config.Default.BackupExtension}"; + var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); + + var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); + foreach (var backupFile in backupFiles) { - LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); - backupFile.Delete(); - } - catch - { - // if unable to delete, do not bother + try + { + LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); + backupFile.Delete(); + } + catch + { + // if unable to delete, do not bother + } } } } @@ -1843,11 +1844,13 @@ namespace ServerManagerTool.Lib try { var backupFolder = GetProfileBackupFolder(_profile); - - var oldBackupFolders = new DirectoryInfo(backupFolder).GetDirectories(); - foreach (var oldBackupFolder in oldBackupFolders) + if (Directory.Exists(backupFolder)) { - oldBackupFolder.Delete(true); + var oldBackupFolders = new DirectoryInfo(backupFolder).GetDirectories(); + foreach (var oldBackupFolder in oldBackupFolders) + { + oldBackupFolder.Delete(true); + } } } catch @@ -1974,21 +1977,24 @@ namespace ServerManagerTool.Lib LogProfileMessage("Delete old server backup files started..."); var backupFolder = GetServerBackupFolder(_profile); - var saveFileName = Path.GetFileNameWithoutExtension(_profile.GameFile); - var backupFileFilter = $"{saveFileName}_*{Config.Default.BackupExtension}"; - var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); - - var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); - foreach (var backupFile in backupFiles) + if (Directory.Exists(backupFolder)) { - try + var saveFileName = Path.GetFileNameWithoutExtension(_profile.GameFile); + var backupFileFilter = $"{saveFileName}_*{Config.Default.BackupExtension}"; + var backupDateFilter = DateTime.Now.AddDays(-deleteInterval); + + var backupFiles = new DirectoryInfo(backupFolder).GetFiles(backupFileFilter).Where(f => f.LastWriteTime < backupDateFilter); + foreach (var backupFile in backupFiles) { - LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); - backupFile.Delete(); - } - catch - { - // if unable to delete, do not bother + try + { + LogProfileMessage($"{backupFile.Name} was deleted, last updated {backupFile.CreationTime}."); + backupFile.Delete(); + } + catch + { + // if unable to delete, do not bother + } } } } @@ -2295,6 +2301,9 @@ namespace ServerManagerTool.Lib var profiles = new Dictionary(); + ServerRuntime.EnableUpdateModStatus = false; + ServerProfile.EnableServerFilesWatcher = false; + foreach (var profileFile in Directory.EnumerateFiles(Config.Default.ConfigPath, "*" + Config.Default.ProfileExtension)) { try @@ -2739,7 +2748,10 @@ namespace ServerManagerTool.Lib var createdNew = false; if (OutputLogs) + { + _loggerBranch = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}", $"BranchUpdate_{GetBranchName(branch.BranchName)}"); _loggerProfile = GetLogger(GetProfileLogFolder(profile.ProfileId, LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}_{profile.ProfileId}", "Update"); + } try { @@ -2798,6 +2810,7 @@ namespace ServerManagerTool.Lib } } + LogProfileMessage(""); LogProfileMessage($"Exitcode = {ExitCode}"); return ExitCode; } @@ -2813,11 +2826,11 @@ namespace ServerManagerTool.Lib var createdNew = false; if (OutputLogs) - _loggerBranch = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}_{GetBranchName(branch.BranchName)}", $"Update_{GetBranchName(branch.BranchName)}"); + _loggerBranch = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), $"{LOGPREFIX_AUTOUPDATE}", $"BranchUpdate_{GetBranchName(branch.BranchName)}"); try { - LogBranchMessage(branch.BranchName, $"Started branch update process."); + LogMessage($"[{GetBranchName(branch.BranchName)}] Started branch update process."); var cacheFolder = GetServerCacheFolder(branch.BranchName); @@ -2863,7 +2876,7 @@ namespace ServerManagerTool.Lib else { var delay = 0; - foreach (var profile in _profiles.Keys.Where(p => p.EnableAutoUpdate)) + foreach (var profile in profiles) { if (delay > 0) Task.Delay(delay * 1000).Wait(); @@ -2885,12 +2898,12 @@ namespace ServerManagerTool.Lib ExitCode = EXITCODE_EXITWITHERRORS; } - LogBranchMessage(branch.BranchName, $"Finished branch update process."); + LogMessage($"[{GetBranchName(branch.BranchName)}] Finished branch update process."); } else { ExitCode = EXITCODE_PROCESSALREADYRUNNING; - LogBranchMessage(branch.BranchName, "Cancelled branch update process, could not lock branch folder."); + LogMessage($"[{GetBranchName(branch.BranchName)}] Cancelled branch update process, could not lock branch folder."); } } catch (Exception ex) @@ -2922,6 +2935,7 @@ namespace ServerManagerTool.Lib } } + LogBranchMessage(branch.BranchName, ""); LogBranchMessage(branch.BranchName, $"Exitcode = {ExitCode}"); return ExitCode; } @@ -2930,7 +2944,7 @@ namespace ServerManagerTool.Lib { int exitCode = EXITCODE_NORMALEXIT; - _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOBACKUP), LOGPREFIX_AUTOBACKUP, "Backup"); + _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOBACKUP), LOGPREFIX_AUTOBACKUP, "AutoBackup"); try { @@ -2979,7 +2993,7 @@ namespace ServerManagerTool.Lib { int exitCode = EXITCODE_NORMALEXIT; - _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOSHUTDOWN), LOGPREFIX_AUTOSHUTDOWN, "Shutdown"); + _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOSHUTDOWN), LOGPREFIX_AUTOSHUTDOWN, "AutoShutdown"); try { @@ -3063,7 +3077,7 @@ namespace ServerManagerTool.Lib Mutex mutex = null; bool createdNew = false; - _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), LOGPREFIX_AUTOUPDATE, "Update"); + _loggerManager = GetLogger(GetLogFolder(LOGPREFIX_AUTOUPDATE), LOGPREFIX_AUTOUPDATE, "AutoUpdate"); try { diff --git a/src/Server-Managers.sln b/src/Server-Managers.sln index 8420576b..3e19ae51 100644 --- a/src/Server-Managers.sln +++ b/src/Server-Managers.sln @@ -48,107 +48,212 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerManager.Discord", "Se EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - AutoBackup|Any CPU = Debug - AutoBackup|Any CPU + Debug - AutoShutdown|Any CPU = Debug - AutoShutdown|Any CPU + Debug - AutoUpdate|Any CPU = Debug - AutoUpdate|Any CPU Debug - Beta|Any CPU = Debug - Beta|Any CPU Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C99D9F7-0C65-4116-927A-94EB018C88FD}.Release|Any CPU.Build.0 = Release|Any CPU + {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {715461E8-4E54-4993-80A8-8E72892135E0}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {715461E8-4E54-4993-80A8-8E72892135E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {715461E8-4E54-4993-80A8-8E72892135E0}.Debug|Any CPU.Build.0 = Debug|Any CPU {715461E8-4E54-4993-80A8-8E72892135E0}.Release|Any CPU.ActiveCfg = Release|Any CPU {715461E8-4E54-4993-80A8-8E72892135E0}.Release|Any CPU.Build.0 = Release|Any CPU + {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Debug|Any CPU.Build.0 = Debug|Any CPU {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Release|Any CPU.ActiveCfg = Release|Any CPU {E4EDA8B8-006C-4D41-822F-F64B6DB0021F}.Release|Any CPU.Build.0 = Release|Any CPU + {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Debug|Any CPU.Build.0 = Debug|Any CPU {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Release|Any CPU.ActiveCfg = Release|Any CPU {679FE859-9A82-4FFB-A758-C1E8DF915F58}.Release|Any CPU.Build.0 = Release|Any CPU + {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {936EF260-FECF-4E9E-A21E-092D65931C7D}.Debug|Any CPU.Build.0 = Debug|Any CPU {936EF260-FECF-4E9E-A21E-092D65931C7D}.Release|Any CPU.ActiveCfg = Release|Any CPU {936EF260-FECF-4E9E-A21E-092D65931C7D}.Release|Any CPU.Build.0 = Release|Any CPU + {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Debug|Any CPU.Build.0 = Debug|Any CPU {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E0C9EE6-780F-4FEF-BA03-E38062A5FDB6}.Release|Any CPU.Build.0 = Release|Any CPU + {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2EE1483-021F-4900-BBE8-88338D1386F4}.Debug|Any CPU.Build.0 = Debug|Any CPU {D2EE1483-021F-4900-BBE8-88338D1386F4}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2EE1483-021F-4900-BBE8-88338D1386F4}.Release|Any CPU.Build.0 = Release|Any CPU + {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug - AutoBackup|Any CPU + {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - AutoBackup|Any CPU.Build.0 = Debug - AutoBackup|Any CPU + {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug - AutoShutdown|Any CPU + {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - AutoShutdown|Any CPU.Build.0 = Debug - AutoShutdown|Any CPU + {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug - AutoUpdate|Any CPU + {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - AutoUpdate|Any CPU.Build.0 = Debug - AutoUpdate|Any CPU {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Debug|Any CPU.Build.0 = Debug|Any CPU {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Release|Any CPU.ActiveCfg = Release|Any CPU {F7A82C6A-32CD-4847-AD16-D79ADC72746E}.Release|Any CPU.Build.0 = Release|Any CPU + {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {96832688-29BD-464F-9DCE-482E37BFC751}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {96832688-29BD-464F-9DCE-482E37BFC751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {96832688-29BD-464F-9DCE-482E37BFC751}.Debug|Any CPU.Build.0 = Debug|Any CPU {96832688-29BD-464F-9DCE-482E37BFC751}.Release|Any CPU.ActiveCfg = Release|Any CPU {96832688-29BD-464F-9DCE-482E37BFC751}.Release|Any CPU.Build.0 = Release|Any CPU + {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug - AutoBackup|Any CPU + {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - AutoBackup|Any CPU.Build.0 = Debug - AutoBackup|Any CPU + {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug - AutoShutdown|Any CPU + {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - AutoShutdown|Any CPU.Build.0 = Debug - AutoShutdown|Any CPU + {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug - AutoUpdate|Any CPU + {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - AutoUpdate|Any CPU.Build.0 = Debug - AutoUpdate|Any CPU {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Debug|Any CPU.Build.0 = Debug|Any CPU {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Release|Any CPU.ActiveCfg = Release|Any CPU {95D4E57F-06F9-4B41-BEBB-2A8E81759BD2}.Release|Any CPU.Build.0 = Release|Any CPU + {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Debug|Any CPU.Build.0 = Debug|Any CPU {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Release|Any CPU.ActiveCfg = Release|Any CPU {4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A}.Release|Any CPU.Build.0 = Release|Any CPU + {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD0A2401-99B8-4DE1-B8ED-9B075172F8AF}.Release|Any CPU.Build.0 = Release|Any CPU + {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Debug|Any CPU.Build.0 = Debug|Any CPU {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Release|Any CPU.ActiveCfg = Release|Any CPU {630422CA-4BCC-4D1D-9701-87D8EAF0B209}.Release|Any CPU.Build.0 = Release|Any CPU + {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug|Any CPU.Build.0 = Debug|Any CPU {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Release|Any CPU.ActiveCfg = Release|Any CPU {39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Release|Any CPU.Build.0 = Release|Any CPU + {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - Beta|Any CPU.ActiveCfg = Debug|Any CPU {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - Beta|Any CPU.Build.0 = Debug|Any CPU {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug|Any CPU.Build.0 = Debug|Any CPU {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Release|Any CPU.Build.0 = Release|Any CPU + {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - Beta|Any CPU.ActiveCfg = Debug|Any CPU {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - Beta|Any CPU.Build.0 = Debug|Any CPU {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug|Any CPU.Build.0 = Debug|Any CPU {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Release|Any CPU.ActiveCfg = Release|Any CPU {1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Release|Any CPU.Build.0 = Release|Any CPU + {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - AutoBackup|Any CPU.ActiveCfg = Debug|Any CPU + {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - AutoBackup|Any CPU.Build.0 = Debug|Any CPU + {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - AutoShutdown|Any CPU.ActiveCfg = Debug|Any CPU + {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - AutoShutdown|Any CPU.Build.0 = Debug|Any CPU + {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - AutoUpdate|Any CPU.ActiveCfg = Debug|Any CPU + {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - AutoUpdate|Any CPU.Build.0 = Debug|Any CPU {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - Beta|Any CPU.ActiveCfg = Debug - Beta|Any CPU {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug - Beta|Any CPU.Build.0 = Debug - Beta|Any CPU {C4C8000D-5E45-497C-A218-B95A1567010E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU