protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; _globalizer = GlobalizedApplication.Instance; try { if (!string.IsNullOrWhiteSpace(Config.Default.CultureName)) { _globalizer.GlobalizationManager.SwitchLanguage(Config.Default.CultureName, true); } } catch (CultureNotFoundException ex) { // just output the exception message, it should default back to the fallback language. Debug.WriteLine(ex.Message); } if (!string.IsNullOrWhiteSpace(Config.Default.StyleName)) { _globalizer.StyleManager.SwitchStyle($"{Config.Default.StyleName}.xaml"); } Args = string.Join(" ", e.Args); // check if we are starting ASM for server restart if (e.Args.Any(a => a.Equals(ARG_BETA))) { BetaVersion = true; } var installPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); PluginHelper.Instance.BetaEnabled = BetaVersion; PluginHelper.Instance.LoadPlugins(installPath, true); // check if we are starting ASM for the old server restart - no longer supported if (e.Args.Any(a => a.StartsWith(ARG_AUTORESTART))) { // just exit Environment.Exit(0); } // check if we are starting ASM for server shutdown if (e.Args.Any(a => a.StartsWith(ARG_AUTOSHUTDOWN1))) { var arg = e.Args.FirstOrDefault(a => a.StartsWith(ARG_AUTOSHUTDOWN1)); var exitCode = ServerApp.PerformAutoShutdown(arg, ServerApp.ServerProcessType.AutoShutdown1); // once we are finished, just exit Environment.Exit(exitCode); } // check if we are starting ASM for server shutdown if (e.Args.Any(a => a.StartsWith(ARG_AUTOSHUTDOWN2))) { var arg = e.Args.FirstOrDefault(a => a.StartsWith(ARG_AUTOSHUTDOWN2)); var exitCode = ServerApp.PerformAutoShutdown(arg, ServerApp.ServerProcessType.AutoShutdown2); // once we are finished, just exit Environment.Exit(exitCode); } // check if we are starting ASM for server updating if (e.Args.Any(a => a.Equals(ARG_AUTOUPDATE))) { var exitCode = ServerApp.PerformAutoUpdate(); // once we are finished, just exit Environment.Exit(exitCode); } // check if we are starting ASM for server backups if (e.Args.Any(a => a.Equals(ARG_AUTOBACKUP))) { var exitCode = ServerApp.PerformAutoBackup(); // once we are finished, just exit Environment.Exit(exitCode); } // check if we are starting ASM for server updating if (e.Args.Any(a => a.Equals(ARG_RCON))) { var rcon = new OpenRCONWindow(); rcon.ShowInTaskbar = true; rcon.WindowStartupLocation = WindowStartupLocation.CenterScreen; rcon.ShowDialog(); Config.Default.Save(); // once we are finished, just exit Environment.Exit(0); } if (Config.Default.RunAsAdministratorPrompt && !SecurityUtils.IsAdministrator()) { var result = MessageBox.Show(_globalizer.GetResourceString("Application_RunAsAdministratorLabel"), _globalizer.GetResourceString("Application_RunAsAdministratorTitle"), MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase); // The following properties run the new process as administrator processInfo.UseShellExecute = true; processInfo.Verb = "runas"; processInfo.Arguments = string.Join(" ", e.Args); // Start the new process try { Process.Start(processInfo); // Shut down the current process Application.Current.Shutdown(0); return; } catch (Exception) { // The user did not allow the application to run as administrator MessageBox.Show(_globalizer.GetResourceString("Application_RunAsAdministrator_FailedLabel"), _globalizer.GetResourceString("Application_RunAsAdministrator_FailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } } } // check if application is already running if (ProcessUtils.IsAlreadyRunning()) { var result = MessageBox.Show(_globalizer.GetResourceString("Application_SingleInstanceLabel"), _globalizer.GetResourceString("Application_SingleInstanceTitle"), MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { if (ProcessUtils.SwitchToCurrentInstance()) { // Shut down the current process Application.Current.Shutdown(0); return; } MessageBox.Show(_globalizer.GetResourceString("Application_SingleInstance_FailedLabel"), _globalizer.GetResourceString("Application_SingleInstance_FailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } } ApplicationStarted = true; // Initial configuration setting if (String.IsNullOrWhiteSpace(Config.Default.DataDir)) { MessageBox.Show(_globalizer.GetResourceString("Application_DataDirectoryLabel"), _globalizer.GetResourceString("Application_DataDirectoryTitle"), MessageBoxButton.OK, MessageBoxImage.Information); while (String.IsNullOrWhiteSpace(Config.Default.DataDir)) { var dialog = new CommonOpenFileDialog(); dialog.EnsureFileExists = true; dialog.IsFolderPicker = true; dialog.Multiselect = false; dialog.Title = _globalizer.GetResourceString("Application_DataDirectory_DialogTitle"); dialog.InitialDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); if (dialog.ShowDialog() != CommonFileDialogResult.Ok) { Environment.Exit(0); } var confirm = MessageBox.Show(String.Format(_globalizer.GetResourceString("Application_DataDirectory_ConfirmLabel"), Path.Combine(dialog.FileName, Config.Default.ProfilesDir), Path.Combine(dialog.FileName, Config.Default.SteamCmdDir)), _globalizer.GetResourceString("Application_DataDirectory_ConfirmTitle"), MessageBoxButton.YesNoCancel, MessageBoxImage.Question); if (confirm == MessageBoxResult.Cancel) { Environment.Exit(0); } else if (confirm == MessageBoxResult.Yes) { Config.Default.DataDir = dialog.FileName; ReconfigureLogging(); break; } } } Config.Default.ConfigDirectory = Path.Combine(Config.Default.DataDir, Config.Default.ProfilesDir); System.IO.Directory.CreateDirectory(Config.Default.ConfigDirectory); Config.Default.Save(); // initialize all the game data GameData.Initialize(); DataFileDetails.PlayerFileExtension = Config.Default.PlayerFileExtension; DataFileDetails.TribeFileExtension = Config.Default.TribeFileExtension; Task.Factory.StartNew(async() => await App.DiscoverMachinePublicIP(forceOverride: true)); }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; _globalizer = GlobalizedApplication.Instance; try { if (!string.IsNullOrWhiteSpace(Config.Default.CultureName)) { _globalizer.GlobalizationManager.SwitchLanguage(Config.Default.CultureName, true); } } catch (Exception ex) { // just output the exception message, it should default back to the fallback language. Debug.WriteLine(ex.Message); } try { if (!string.IsNullOrWhiteSpace(Config.Default.StyleName)) { _globalizer.StyleManager.SwitchStyle(Config.Default.StyleName, true); } } catch (Exception ex) { // just output the exception message, it should default back to the fallback style. Debug.WriteLine(ex.Message); } TaskSchedulerUtils.TaskFolder = Config.Default.ScheduledTaskFolder; this.Args = string.Join(" ", e.Args); // check if we are starting server manager in BETA/TEST mode if (e.Args.Any(a => a.Equals(Constants.ARG_BETA, StringComparison.OrdinalIgnoreCase) || a.Equals(Constants.ARG_TEST, StringComparison.OrdinalIgnoreCase))) { this.BetaVersion = true; } // check if we need to set the title if (e.Args.Any(a => a.Equals(Constants.ARG_TITLE, StringComparison.OrdinalIgnoreCase))) { for (int i = 0; i < e.Args.Length - 1; i++) { if (e.Args[i].Equals(Constants.ARG_TITLE, StringComparison.OrdinalIgnoreCase) && i < e.Args.Length - 1 && !e.Args[i + 1].StartsWith("-")) { Title = e.Args[i + 1].Trim(); } } } // check and update the public IP address DiscoverMachinePublicIP(Config.Default.ManagePublicIPAutomatically); var installPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); PluginHelper.Instance.BetaEnabled = this.BetaVersion; PluginHelper.Instance.LoadPlugins(installPath, true); PluginHelper.Instance.SetFetchProfileCallback(FetchProfiles); // check if we are starting server manager for server shutdown if (e.Args.Any(a => a.StartsWith(Constants.ARG_AUTOSHUTDOWN1, StringComparison.OrdinalIgnoreCase))) { var arg = e.Args.FirstOrDefault(a => a.StartsWith(Constants.ARG_AUTOSHUTDOWN1, StringComparison.OrdinalIgnoreCase)); var exitCode = ServerApp.PerformAutoShutdown(arg, ServerProcessType.AutoShutdown1); // once we are finished, just exit Environment.Exit(exitCode); } // check if we are starting server manager for server shutdown if (e.Args.Any(a => a.StartsWith(Constants.ARG_AUTOSHUTDOWN2, StringComparison.OrdinalIgnoreCase))) { var arg = e.Args.FirstOrDefault(a => a.StartsWith(Constants.ARG_AUTOSHUTDOWN2, StringComparison.OrdinalIgnoreCase)); var exitCode = ServerApp.PerformAutoShutdown(arg, ServerProcessType.AutoShutdown2); // once we are finished, just exit Environment.Exit(exitCode); } // check if we are starting server manager for server updating if (e.Args.Any(a => a.Equals(Constants.ARG_AUTOUPDATE, StringComparison.OrdinalIgnoreCase))) { var exitCode = ServerApp.PerformAutoUpdate(); // once we are finished, just exit Environment.Exit(exitCode); } // check if we are starting server manager for server backups if (e.Args.Any(a => a.Equals(Constants.ARG_AUTOBACKUP, StringComparison.OrdinalIgnoreCase))) { var exitCode = ServerApp.PerformAutoBackup(); // once we are finished, just exit Environment.Exit(exitCode); } if (Config.Default.RunAsAdministratorPrompt && !SecurityUtils.IsAdministrator()) { var result = MessageBox.Show(_globalizer.GetResourceString("Application_RunAsAdministratorLabel"), _globalizer.GetResourceString("Application_RunAsAdministratorTitle"), MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { var processInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase); // The following properties run the new process as administrator processInfo.UseShellExecute = true; processInfo.Verb = "runas"; processInfo.Arguments = string.Join(" ", e.Args); // Start the new process try { Process.Start(processInfo); // Shut down the current process Application.Current.Shutdown(0); return; } catch (Exception) { // The user did not allow the application to run as administrator MessageBox.Show(_globalizer.GetResourceString("Application_RunAsAdministrator_FailedLabel"), _globalizer.GetResourceString("Application_RunAsAdministrator_FailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } } } // check if application is already running if (ProcessUtils.IsAlreadyRunning()) { var result = MessageBox.Show(_globalizer.GetResourceString("Application_SingleInstanceLabel"), _globalizer.GetResourceString("Application_SingleInstanceTitle"), MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { if (ProcessUtils.SwitchToCurrentInstance()) { // Shut down the current process Application.Current.Shutdown(0); return; } MessageBox.Show(_globalizer.GetResourceString("Application_SingleInstance_FailedLabel"), _globalizer.GetResourceString("Application_SingleInstance_FailedTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } } this.ApplicationStarted = true; // Initial configuration setting if (String.IsNullOrWhiteSpace(Config.Default.DataPath)) { MessageBox.Show(_globalizer.GetResourceString("Application_DataDirectoryLabel"), _globalizer.GetResourceString("Application_DataDirectoryTitle"), MessageBoxButton.OK, MessageBoxImage.Information); var installationFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); if (!installationFolder.EndsWith(@"\")) { installationFolder += @"\"; } while (String.IsNullOrWhiteSpace(Config.Default.DataPath)) { var dialog = new CommonOpenFileDialog { EnsureFileExists = true, IsFolderPicker = true, Multiselect = false, Title = _globalizer.GetResourceString("Application_DataDirectory_DialogTitle"), InitialDirectory = installationFolder }; if (dialog.ShowDialog() != CommonFileDialogResult.Ok) { Environment.Exit(0); } MessageBoxResult confirm = MessageBoxResult.Cancel; // check if the folder is under the installation folder var newDataFolder = dialog.FileName; if (!newDataFolder.EndsWith(@"\")) { newDataFolder += @"\"; } if (newDataFolder.StartsWith(installationFolder)) { confirm = MessageBoxResult.No; MessageBox.Show(_globalizer.GetResourceString("Application_DataDirectory_WithinInstallFolderErrorLabel"), _globalizer.GetResourceString("Application_DataDirectory_WithinInstallFolderErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } else { confirm = MessageBox.Show(String.Format(_globalizer.GetResourceString("Application_DataDirectory_ConfirmLabel"), Path.Combine(newDataFolder, Config.Default.ProfilesRelativePath), Path.Combine(newDataFolder, CommonConfig.Default.SteamCmdRelativePath)), _globalizer.GetResourceString("Application_DataDirectory_ConfirmTitle"), MessageBoxButton.YesNoCancel, MessageBoxImage.Question); } if (confirm == MessageBoxResult.Cancel) { Environment.Exit(0); } else if (confirm == MessageBoxResult.Yes) { if (newDataFolder.EndsWith(@"\")) { newDataFolder = newDataFolder.Substring(0, newDataFolder.Length - 1); } Config.Default.DataPath = newDataFolder; ReconfigureLogging(); break; } } } Config.Default.ConfigPath = Path.Combine(Config.Default.DataPath, Config.Default.ProfilesRelativePath); System.IO.Directory.CreateDirectory(Config.Default.ConfigPath); Config.Default.Save(); CommonConfig.Default.Save(); if (e.Args.Any(a => a.StartsWith(Constants.ARG_SERVERMONITOR, StringComparison.OrdinalIgnoreCase))) { ServerRuntime.EnableUpdateModStatus = false; ServerProfile.EnableServerFilesWatcher = false; StartupUri = new Uri("Windows/ServerMonitorWindow.xaml", UriKind.RelativeOrAbsolute); } else { // initialize all the game data GameData.Initialize(); StartupUri = new Uri("Windows/AutoUpdateWindow.xaml", UriKind.RelativeOrAbsolute); } }