From 776dbc409758310b48635a95285f05edb92b258c Mon Sep 17 00:00:00 2001 From: pizzaboxer Date: Sat, 10 Aug 2024 13:00:39 +0100 Subject: [PATCH 1/6] Draft: new installer system the beginning of a long arduous cleanup of two years of debt --- Bloxstrap/App.xaml.cs | 241 +++------ Bloxstrap/Bloxstrap.csproj | 5 +- Bloxstrap/Bootstrapper.cs | 385 ++------------ Bloxstrap/Enums/ErrorCode.cs | 4 +- Bloxstrap/Enums/NextAction.cs | 9 + Bloxstrap/Enums/VersionComparison.cs | 9 + Bloxstrap/InstallChecker.cs | 279 ----------- Bloxstrap/Installer.cs | 470 ++++++++++++++++++ Bloxstrap/JsonManager.cs | 6 - Bloxstrap/LaunchHandler.cs | 230 +++++++++ Bloxstrap/LaunchSettings.cs | 7 +- Bloxstrap/Logger.cs | 1 + Bloxstrap/Paths.cs | 4 +- Bloxstrap/ProtocolHandler.cs | 6 +- Bloxstrap/Resources/Menu/StartMenu.png | Bin 256554 -> 0 bytes Bloxstrap/Resources/Strings.Designer.cs | 432 +++++++++++----- Bloxstrap/Resources/Strings.resx | 156 ++++-- Bloxstrap/RobloxDeployment.cs | 5 +- .../Dialogs/LanguageSelectorDialog.xaml | 6 +- .../UI/Elements/Dialogs/LaunchMenuDialog.xaml | 54 ++ .../Elements/Dialogs/LaunchMenuDialog.xaml.cs | 42 ++ .../Elements/Dialogs/UninstallerDialog.xaml | 56 +++ .../Dialogs/UninstallerDialog.xaml.cs | 45 ++ .../UI/Elements/Installer/MainWindow.xaml | 79 +++ .../UI/Elements/Installer/MainWindow.xaml.cs | 137 +++++ .../Installer/Pages/CompletionPage.xaml | 32 ++ .../Installer/Pages/CompletionPage.xaml.cs | 36 ++ .../Elements/Installer/Pages/InstallPage.xaml | 62 +++ .../Installer/Pages/InstallPage.xaml.cs | 39 ++ .../Elements/Installer/Pages/WelcomePage.xaml | 55 ++ .../Installer/Pages/WelcomePage.xaml.cs | 33 ++ .../Elements/Menu/Pages/InstallationPage.xaml | 80 --- .../Menu/Pages/InstallationPage.xaml.cs | 31 -- .../Elements/Menu/Pages/PreInstallPage.xaml | 38 -- .../Menu/Pages/PreInstallPage.xaml.cs | 16 - .../{Menu => Settings}/MainWindow.xaml | 12 +- .../{Menu => Settings}/MainWindow.xaml.cs | 18 +- .../{Menu => Settings}/Pages/AboutPage.xaml | 2 +- .../Pages/AboutPage.xaml.cs | 4 +- .../Pages/AppearancePage.xaml | 12 +- .../Pages/AppearancePage.xaml.cs | 4 +- .../Pages/BehaviourPage.xaml | 6 +- .../Pages/BehaviourPage.xaml.cs | 4 +- .../Pages/FastFlagEditorPage.xaml | 4 +- .../Pages/FastFlagEditorPage.xaml.cs | 2 +- .../Pages/FastFlagEditorWarningPage.xaml | 4 +- .../Pages/FastFlagEditorWarningPage.xaml.cs | 4 +- .../Pages/FastFlagsPage.xaml | 2 +- .../Pages/FastFlagsPage.xaml.cs | 4 +- .../Pages/IntegrationsPage.xaml | 2 +- .../Pages/IntegrationsPage.xaml.cs | 4 +- .../{Menu => Settings}/Pages/ModsPage.xaml | 32 +- .../{Menu => Settings}/Pages/ModsPage.xaml.cs | 4 +- Bloxstrap/UI/Frontend.cs | 28 +- .../ViewModels/Dialogs/LaunchMenuViewModel.cs | 23 + .../Dialogs/UninstallerViewModel.cs | 24 + Bloxstrap/UI/ViewModels/GlobalViewModel.cs | 2 - .../Installer/CompletionViewModel.cs | 23 + .../ViewModels/Installer/InstallViewModel.cs | 111 +++++ .../Installer/MainWindowViewModel.cs | 52 ++ .../ViewModels/Installer/WelcomeViewModel.cs | 56 +++ .../ViewModels/Menu/InstallationViewModel.cs | 43 -- .../UI/ViewModels/Menu/MainWindowViewModel.cs | 139 ------ .../UI/ViewModels/Menu/PreInstallViewModel.cs | 14 - .../{Menu => Settings}/AboutViewModel.cs | 2 +- .../{Menu => Settings}/AppearanceViewModel.cs | 4 +- .../{Menu => Settings}/BehaviourViewModel.cs | 2 +- .../FastFlagEditorWarningViewModel.cs | 4 +- .../{Menu => Settings}/FastFlagsViewModel.cs | 4 +- .../IntegrationsViewModel.cs | 2 +- .../Settings/MainWindowViewModel.cs | 22 + .../{Menu => Settings}/ModsViewModel.cs | 30 +- Bloxstrap/Utilities.cs | 4 +- Bloxstrap/{ => Utility}/InterProcessLock.cs | 2 +- Bloxstrap/Utility/Shortcut.cs | 6 +- 75 files changed, 2334 insertions(+), 1477 deletions(-) create mode 100644 Bloxstrap/Enums/NextAction.cs create mode 100644 Bloxstrap/Enums/VersionComparison.cs delete mode 100644 Bloxstrap/InstallChecker.cs create mode 100644 Bloxstrap/Installer.cs create mode 100644 Bloxstrap/LaunchHandler.cs delete mode 100644 Bloxstrap/Resources/Menu/StartMenu.png create mode 100644 Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml create mode 100644 Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml.cs create mode 100644 Bloxstrap/UI/Elements/Dialogs/UninstallerDialog.xaml create mode 100644 Bloxstrap/UI/Elements/Dialogs/UninstallerDialog.xaml.cs create mode 100644 Bloxstrap/UI/Elements/Installer/MainWindow.xaml create mode 100644 Bloxstrap/UI/Elements/Installer/MainWindow.xaml.cs create mode 100644 Bloxstrap/UI/Elements/Installer/Pages/CompletionPage.xaml create mode 100644 Bloxstrap/UI/Elements/Installer/Pages/CompletionPage.xaml.cs create mode 100644 Bloxstrap/UI/Elements/Installer/Pages/InstallPage.xaml create mode 100644 Bloxstrap/UI/Elements/Installer/Pages/InstallPage.xaml.cs create mode 100644 Bloxstrap/UI/Elements/Installer/Pages/WelcomePage.xaml create mode 100644 Bloxstrap/UI/Elements/Installer/Pages/WelcomePage.xaml.cs delete mode 100644 Bloxstrap/UI/Elements/Menu/Pages/InstallationPage.xaml delete mode 100644 Bloxstrap/UI/Elements/Menu/Pages/InstallationPage.xaml.cs delete mode 100644 Bloxstrap/UI/Elements/Menu/Pages/PreInstallPage.xaml delete mode 100644 Bloxstrap/UI/Elements/Menu/Pages/PreInstallPage.xaml.cs rename Bloxstrap/UI/Elements/{Menu => Settings}/MainWindow.xaml (85%) rename Bloxstrap/UI/Elements/{Menu => Settings}/MainWindow.xaml.cs (73%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/AboutPage.xaml (99%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/AboutPage.xaml.cs (74%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/AppearancePage.xaml (92%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/AppearancePage.xaml.cs (76%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/BehaviourPage.xaml (93%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/BehaviourPage.xaml.cs (89%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/FastFlagEditorPage.xaml (97%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/FastFlagEditorPage.xaml.cs (99%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/FastFlagEditorWarningPage.xaml (91%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/FastFlagEditorWarningPage.xaml.cs (89%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/FastFlagsPage.xaml (99%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/FastFlagsPage.xaml.cs (90%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/IntegrationsPage.xaml (99%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/IntegrationsPage.xaml.cs (89%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/ModsPage.xaml (75%) rename Bloxstrap/UI/Elements/{Menu => Settings}/Pages/ModsPage.xaml.cs (85%) create mode 100644 Bloxstrap/UI/ViewModels/Dialogs/LaunchMenuViewModel.cs create mode 100644 Bloxstrap/UI/ViewModels/Dialogs/UninstallerViewModel.cs create mode 100644 Bloxstrap/UI/ViewModels/Installer/CompletionViewModel.cs create mode 100644 Bloxstrap/UI/ViewModels/Installer/InstallViewModel.cs create mode 100644 Bloxstrap/UI/ViewModels/Installer/MainWindowViewModel.cs create mode 100644 Bloxstrap/UI/ViewModels/Installer/WelcomeViewModel.cs delete mode 100644 Bloxstrap/UI/ViewModels/Menu/InstallationViewModel.cs delete mode 100644 Bloxstrap/UI/ViewModels/Menu/MainWindowViewModel.cs delete mode 100644 Bloxstrap/UI/ViewModels/Menu/PreInstallViewModel.cs rename Bloxstrap/UI/ViewModels/{Menu => Settings}/AboutViewModel.cs (94%) rename Bloxstrap/UI/ViewModels/{Menu => Settings}/AppearanceViewModel.cs (97%) rename Bloxstrap/UI/ViewModels/{Menu => Settings}/BehaviourViewModel.cs (97%) rename Bloxstrap/UI/ViewModels/{Menu => Settings}/FastFlagEditorWarningViewModel.cs (95%) rename Bloxstrap/UI/ViewModels/{Menu => Settings}/FastFlagsViewModel.cs (98%) rename Bloxstrap/UI/ViewModels/{Menu => Settings}/IntegrationsViewModel.cs (98%) create mode 100644 Bloxstrap/UI/ViewModels/Settings/MainWindowViewModel.cs rename Bloxstrap/UI/ViewModels/{Menu => Settings}/ModsViewModel.cs (78%) rename Bloxstrap/{ => Utility}/InterProcessLock.cs (95%) diff --git a/Bloxstrap/App.xaml.cs b/Bloxstrap/App.xaml.cs index 4d5ac5b..f779439 100644 --- a/Bloxstrap/App.xaml.cs +++ b/Bloxstrap/App.xaml.cs @@ -1,10 +1,10 @@ using System.Reflection; -using System.Web; using System.Windows; using System.Windows.Threading; -using Windows.Win32; -using Windows.Win32.Foundation; +using Microsoft.Win32; + +using Bloxstrap.Resources; namespace Bloxstrap { @@ -15,29 +15,27 @@ namespace Bloxstrap { public const string ProjectName = "Bloxstrap"; public const string ProjectRepository = "pizzaboxer/bloxstrap"; + public const string RobloxPlayerAppName = "RobloxPlayerBeta"; public const string RobloxStudioAppName = "RobloxStudioBeta"; - // used only for communicating between app and menu - use Directories.Base for anything else - public static string BaseDirectory = null!; - public static string? CustomFontLocation; - - public static bool ShouldSaveConfigs { get; set; } = false; - - public static bool IsSetupComplete { get; set; } = true; - public static bool IsFirstRun { get; set; } = true; + // simple shorthand for extremely frequently used and long string - this goes under HKCU + public const string UninstallKey = $@"Software\Microsoft\Windows\CurrentVersion\Uninstall\{ProjectName}"; public static LaunchSettings LaunchSettings { get; private set; } = null!; public static BuildMetadataAttribute BuildMetadata = Assembly.GetExecutingAssembly().GetCustomAttribute()!; + public static string Version = Assembly.GetExecutingAssembly().GetName().Version!.ToString()[..^2]; - public static NotifyIconWrapper? NotifyIcon { get; private set; } + public static NotifyIconWrapper? NotifyIcon { get; set; } public static readonly Logger Logger = new(); public static readonly JsonManager Settings = new(); + public static readonly JsonManager State = new(); + public static readonly FastFlagManager FastFlags = new(); public static readonly HttpClient HttpClient = new( @@ -52,18 +50,10 @@ namespace Bloxstrap public static void Terminate(ErrorCode exitCode = ErrorCode.ERROR_SUCCESS) { - if (IsFirstRun) - { - if (exitCode == ErrorCode.ERROR_CANCELLED) - exitCode = ErrorCode.ERROR_INSTALL_USEREXIT; - } - int exitCodeNum = (int)exitCode; Logger.WriteLine("App::Terminate", $"Terminating with exit code {exitCodeNum} ({exitCode})"); - Settings.Save(); - State.Save(); NotifyIcon?.Dispose(); Environment.Exit(exitCodeNum); @@ -98,16 +88,7 @@ namespace Bloxstrap #endif } - private void StartupFinished() - { - const string LOG_IDENT = "App::StartupFinished"; - - Logger.WriteLine(LOG_IDENT, "Successfully reached end of main thread. Terminating..."); - - Terminate(); - } - - protected override async void OnStartup(StartupEventArgs e) + protected override void OnStartup(StartupEventArgs e) { const string LOG_IDENT = "App::OnStartup"; @@ -128,19 +109,62 @@ namespace Bloxstrap // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); + HttpClient.Timeout = TimeSpan.FromSeconds(30); + HttpClient.DefaultRequestHeaders.Add("User-Agent", ProjectRepository); + LaunchSettings = new LaunchSettings(e.Args); - using (var checker = new InstallChecker()) + // installation check begins here + using var uninstallKey = Registry.CurrentUser.OpenSubKey(UninstallKey); + string? installLocation = null; + + if (uninstallKey?.GetValue("InstallLocation") is string value && Directory.Exists(value)) + installLocation = value; + + // silently change install location if we detect a portable run + // this should also handle renaming of the user profile folder + if (installLocation is null && Directory.GetParent(Paths.Process)?.FullName is string processDir) { - checker.Check(); + var files = Directory.GetFiles(processDir).Select(x => Path.GetFileName(x)).ToArray(); + var installer = new Installer + { + InstallLocation = processDir, + IsImplicitInstall = true + }; + + // check if settings.json and state.json are the only files in the folder, and if we can write to it + if (files.Length <= 3 + && files.Contains("Settings.json") + && files.Contains("State.json") + && installer.CheckInstallLocation()) + { + Logger.WriteLine(LOG_IDENT, $"Changing install location to '{processDir}'"); + installer.DoInstall(); + installLocation = processDir; + } } - Paths.Initialize(BaseDirectory); - - // we shouldn't save settings on the first run until the first installation is finished, - // just in case the user decides to cancel the install - if (!IsFirstRun) + if (installLocation is null) { + Logger.Initialize(true); + LaunchHandler.LaunchInstaller(); + } + else + { + Paths.Initialize(installLocation); + + // ensure executable is in the install directory + if (Paths.Process != Paths.Application && !File.Exists(Paths.Application)) + File.Copy(Paths.Process, Paths.Application); + + Logger.Initialize(LaunchSettings.IsUninstall); + + if (!Logger.Initialized && !Logger.NoWriteMode) + { + Logger.WriteLine(LOG_IDENT, "Possible duplicate launch detected, terminating."); + Terminate(); + } + Settings.Load(); State.Load(); FastFlags.Load(); @@ -152,145 +176,14 @@ namespace Bloxstrap } Locale.Set(Settings.Prop.Locale); + + if (!LaunchSettings.IsUninstall) + Installer.HandleUpgrade(); + + LaunchHandler.ProcessLaunchArgs(); } - LaunchSettings.ParseRoblox(); - - HttpClient.Timeout = TimeSpan.FromSeconds(30); - HttpClient.DefaultRequestHeaders.Add("User-Agent", ProjectRepository); - - // TEMPORARY FILL-IN FOR NEW FUNCTIONALITY - // REMOVE WHEN LARGER REFACTORING IS DONE - var connectionResult = await RobloxDeployment.InitializeConnectivity(); - - if (connectionResult is not null) - { - Logger.WriteException(LOG_IDENT, connectionResult); - - Frontend.ShowConnectivityDialog( - Bloxstrap.Resources.Strings.Dialog_Connectivity_UnableToConnect, - Bloxstrap.Resources.Strings.Bootstrapper_Connectivity_Preventing, - connectionResult - ); - - return; - } - - if (LaunchSettings.IsUninstall && IsFirstRun) - { - Frontend.ShowMessageBox(Bloxstrap.Resources.Strings.Bootstrapper_FirstRunUninstall, MessageBoxImage.Error); - Terminate(ErrorCode.ERROR_INVALID_FUNCTION); - return; - } - - // we shouldn't save settings on the first run until the first installation is finished, - // just in case the user decides to cancel the install - if (!IsFirstRun) - { - Logger.Initialize(LaunchSettings.IsUninstall); - - if (!Logger.Initialized && !Logger.NoWriteMode) - { - Logger.WriteLine(LOG_IDENT, "Possible duplicate launch detected, terminating."); - Terminate(); - } - } - - if (!LaunchSettings.IsUninstall && !LaunchSettings.IsMenuLaunch) - NotifyIcon = new(); - -#if !DEBUG - if (!LaunchSettings.IsUninstall && !IsFirstRun) - InstallChecker.CheckUpgrade(); -#endif - - if (LaunchSettings.IsMenuLaunch) - { - Process? menuProcess = Utilities.GetProcessesSafe().Where(x => x.MainWindowTitle == $"{ProjectName} Menu").FirstOrDefault(); - - if (menuProcess is not null) - { - var handle = menuProcess.MainWindowHandle; - Logger.WriteLine(LOG_IDENT, $"Found an already existing menu window with handle {handle}"); - PInvoke.SetForegroundWindow((HWND)handle); - } - else - { - bool showAlreadyRunningWarning = Process.GetProcessesByName(ProjectName).Length > 1 && !LaunchSettings.IsQuiet; - Frontend.ShowMenu(showAlreadyRunningWarning); - } - - StartupFinished(); - return; - } - - if (!IsFirstRun) - ShouldSaveConfigs = true; - - if (Settings.Prop.ConfirmLaunches && Mutex.TryOpenExisting("ROBLOX_singletonMutex", out var _)) - { - // this currently doesn't work very well since it relies on checking the existence of the singleton mutex - // which often hangs around for a few seconds after the window closes - // it would be better to have this rely on the activity tracker when we implement IPC in the planned refactoring - - var result = Frontend.ShowMessageBox(Bloxstrap.Resources.Strings.Bootstrapper_ConfirmLaunch, MessageBoxImage.Warning, MessageBoxButton.YesNo); - - if (result != MessageBoxResult.Yes) - { - StartupFinished(); - return; - } - } - - // start bootstrapper and show the bootstrapper modal if we're not running silently - Logger.WriteLine(LOG_IDENT, "Initializing bootstrapper"); - Bootstrapper bootstrapper = new(LaunchSettings.RobloxLaunchArgs, LaunchSettings.RobloxLaunchMode); - IBootstrapperDialog? dialog = null; - - if (!LaunchSettings.IsQuiet) - { - Logger.WriteLine(LOG_IDENT, "Initializing bootstrapper dialog"); - dialog = Settings.Prop.BootstrapperStyle.GetNew(); - bootstrapper.Dialog = dialog; - dialog.Bootstrapper = bootstrapper; - } - - Task bootstrapperTask = Task.Run(async () => await bootstrapper.Run()).ContinueWith(t => - { - Logger.WriteLine(LOG_IDENT, "Bootstrapper task has finished"); - - // notifyicon is blocking main thread, must be disposed here - NotifyIcon?.Dispose(); - - if (t.IsFaulted) - Logger.WriteLine(LOG_IDENT, "An exception occurred when running the bootstrapper"); - - if (t.Exception is null) - return; - - Logger.WriteException(LOG_IDENT, t.Exception); - - Exception exception = t.Exception; - -#if !DEBUG - if (t.Exception.GetType().ToString() == "System.AggregateException") - exception = t.Exception.InnerException!; -#endif - - FinalizeExceptionHandling(exception, false); - }); - - // this ordering is very important as all wpf windows are shown as modal dialogs, mess it up and you'll end up blocking input to one of them - dialog?.ShowBootstrapper(); - - if (!LaunchSettings.IsNoLaunch && Settings.Prop.EnableActivityTracking) - NotifyIcon?.InitializeContextMenu(); - - Logger.WriteLine(LOG_IDENT, "Waiting for bootstrapper task to finish"); - - bootstrapperTask.Wait(); - - StartupFinished(); + Terminate(); } } } diff --git a/Bloxstrap/Bloxstrap.csproj b/Bloxstrap/Bloxstrap.csproj index ae26c5e..fe9dcbd 100644 --- a/Bloxstrap/Bloxstrap.csproj +++ b/Bloxstrap/Bloxstrap.csproj @@ -7,8 +7,8 @@ true True Bloxstrap.ico - 2.7.0 - 2.7.0 + 2.8.0 + 2.8.0 app.manifest true false @@ -20,7 +20,6 @@ - diff --git a/Bloxstrap/Bootstrapper.cs b/Bloxstrap/Bootstrapper.cs index 078a545..97b7dbb 100644 --- a/Bloxstrap/Bootstrapper.cs +++ b/Bloxstrap/Bootstrapper.cs @@ -25,11 +25,11 @@ namespace Bloxstrap private bool FreshInstall => String.IsNullOrEmpty(_versionGuid); private string _playerFileName => _launchMode == LaunchMode.Player ? "RobloxPlayerBeta.exe" : "RobloxStudioBeta.exe"; - // TODO: change name private string _playerLocation => Path.Combine(_versionFolder, _playerFileName); private string _launchCommandLine; private LaunchMode _launchMode; + private bool _installWebView2; private string _versionGuid { @@ -81,10 +81,11 @@ namespace Bloxstrap #endregion #region Core - public Bootstrapper(string launchCommandLine, LaunchMode launchMode) + public Bootstrapper(string launchCommandLine, LaunchMode launchMode, bool installWebView2) { _launchCommandLine = launchCommandLine; _launchMode = launchMode; + _installWebView2 = installWebView2; _packageDirectories = _launchMode == LaunchMode.Player ? PackageMap.Player : PackageMap.Studio; } @@ -96,7 +97,7 @@ namespace Bloxstrap string productName = "Roblox"; if (_launchMode != LaunchMode.Player) - productName += " Studio"; + productName = "Roblox Studio"; message = message.Replace("{product}", productName); @@ -124,47 +125,41 @@ namespace Bloxstrap App.Logger.WriteLine(LOG_IDENT, "Running bootstrapper"); - if (App.LaunchSettings.IsUninstall) - { - Uninstall(); - return; - } - // connectivity check App.Logger.WriteLine(LOG_IDENT, "Performing connectivity check..."); - SetStatus(Resources.Strings.Bootstrapper_Status_Connecting); + SetStatus(Strings.Bootstrapper_Status_Connecting); - try - { - await RobloxDeployment.GetInfo(RobloxDeployment.DefaultChannel); - } - catch (Exception ex) + var connectionResult = await RobloxDeployment.InitializeConnectivity(); + + if (connectionResult is not null) { App.Logger.WriteLine(LOG_IDENT, "Connectivity check failed!"); - App.Logger.WriteException(LOG_IDENT, ex); + App.Logger.WriteException(LOG_IDENT, connectionResult); - string message = Resources.Strings.Bootstrapper_Connectivity_Preventing; + string message = Strings.Bootstrapper_Connectivity_Preventing; - if (ex.GetType() == typeof(HttpResponseException)) - message = Resources.Strings.Bootstrapper_Connectivity_RobloxDown; - else if (ex.GetType() == typeof(TaskCanceledException)) - message = Resources.Strings.Bootstrapper_Connectivity_TimedOut; - else if (ex.GetType() == typeof(AggregateException)) - ex = ex.InnerException!; + if (connectionResult.GetType() == typeof(HttpResponseException)) + message = Strings.Bootstrapper_Connectivity_RobloxDown; + else if (connectionResult.GetType() == typeof(TaskCanceledException)) + message = Strings.Bootstrapper_Connectivity_TimedOut; + else if (connectionResult.GetType() == typeof(AggregateException)) + connectionResult = connectionResult.InnerException!; - Frontend.ShowConnectivityDialog(Strings.Dialog_Connectivity_UnableToConnect, message, ex); + Frontend.ShowConnectivityDialog(Strings.Dialog_Connectivity_UnableToConnect, message, connectionResult); App.Terminate(ErrorCode.ERROR_CANCELLED); - } - finally - { - App.Logger.WriteLine(LOG_IDENT, "Connectivity check finished"); + + return; } + App.Logger.WriteLine(LOG_IDENT, "Connectivity check finished"); + + await RobloxDeployment.GetInfo(RobloxDeployment.DefaultChannel); + #if !DEBUG - if (!App.IsFirstRun && App.Settings.Prop.CheckForUpdates) + if (App.Settings.Prop.CheckForUpdates) await CheckForUpdates(); #endif @@ -177,7 +172,7 @@ namespace Bloxstrap { Mutex.OpenExisting("Bloxstrap_SingletonMutex").Close(); App.Logger.WriteLine(LOG_IDENT, "Bloxstrap_SingletonMutex mutex exists, waiting..."); - SetStatus(Resources.Strings.Bootstrapper_Status_WaitingOtherInstances); + SetStatus(Strings.Bootstrapper_Status_WaitingOtherInstances); mutexExists = true; } catch (Exception) @@ -199,37 +194,30 @@ namespace Bloxstrap await CheckLatestVersion(); // install/update roblox if we're running for the first time, needs updating, or the player location doesn't exist - if (App.IsFirstRun || _latestVersionGuid != _versionGuid || !File.Exists(_playerLocation)) + if (_latestVersionGuid != _versionGuid || !File.Exists(_playerLocation)) await InstallLatestVersion(); - if (App.IsFirstRun) - App.ShouldSaveConfigs = true; - MigrateIntegrations(); - await InstallWebView2(); + if (_installWebView2) + await InstallWebView2(); App.FastFlags.Save(); await ApplyModifications(); - if (App.IsFirstRun || FreshInstall) - { - Register(); + // TODO: move this to install/upgrade flow + if (FreshInstall) RegisterProgramSize(); - } CheckInstall(); // at this point we've finished updating our configs App.Settings.Save(); App.State.Save(); - App.ShouldSaveConfigs = false; await mutex.ReleaseAsync(); - if (App.IsFirstRun && App.LaunchSettings.IsNoLaunch) - Dialog?.ShowSuccess(Resources.Strings.Bootstrapper_SuccessfullyInstalled); - else if (!App.LaunchSettings.IsNoLaunch && !_cancelFired) + if (!App.LaunchSettings.IsNoLaunch && !_cancelFired) await StartRoblox(); } @@ -272,21 +260,7 @@ namespace Bloxstrap { const string LOG_IDENT = "Bootstrapper::StartRoblox"; - SetStatus(Resources.Strings.Bootstrapper_Status_Starting); - - if (!File.Exists(Path.Combine(Paths.System, "mfplat.dll"))) - { - Frontend.ShowMessageBox( - Resources.Strings.Bootstrapper_WMFNotFound, - MessageBoxImage.Error - ); - - if (!App.LaunchSettings.IsQuiet) - Utilities.ShellExecute("https://support.microsoft.com/en-us/topic/media-feature-pack-list-for-windows-n-editions-c1c6fffa-d052-8338-7a79-a4bb980a700a"); - - Dialog?.CloseBootstrapper(); - return; - } + SetStatus(Strings.Bootstrapper_Status_Starting); if (_launchMode != LaunchMode.StudioAuth) { @@ -450,9 +424,7 @@ namespace Bloxstrap try { // clean up install - if (App.IsFirstRun) - Directory.Delete(Paths.Base, true); - else if (Directory.Exists(_versionFolder)) + if (Directory.Exists(_versionFolder)) Directory.Delete(_versionFolder, true); } catch (Exception ex) @@ -468,38 +440,6 @@ namespace Bloxstrap #endregion #region App Install - public static void Register() - { - const string LOG_IDENT = "Bootstrapper::Register"; - - using (RegistryKey applicationKey = Registry.CurrentUser.CreateSubKey($@"Software\{App.ProjectName}")) - { - applicationKey.SetValue("InstallLocation", Paths.Base); - } - - // set uninstall key - using (RegistryKey uninstallKey = Registry.CurrentUser.CreateSubKey($@"Software\Microsoft\Windows\CurrentVersion\Uninstall\{App.ProjectName}")) - { - uninstallKey.SetValue("DisplayIcon", $"{Paths.Application},0"); - uninstallKey.SetValue("DisplayName", App.ProjectName); - uninstallKey.SetValue("DisplayVersion", App.Version); - - if (uninstallKey.GetValue("InstallDate") is null) - uninstallKey.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd")); - - uninstallKey.SetValue("InstallLocation", Paths.Base); - uninstallKey.SetValue("NoRepair", 1); - uninstallKey.SetValue("Publisher", "pizzaboxer"); - uninstallKey.SetValue("ModifyPath", $"\"{Paths.Application}\" -menu"); - uninstallKey.SetValue("QuietUninstallString", $"\"{Paths.Application}\" -uninstall -quiet"); - uninstallKey.SetValue("UninstallString", $"\"{Paths.Application}\" -uninstall"); - uninstallKey.SetValue("URLInfoAbout", $"https://github.com/{App.ProjectRepository}"); - uninstallKey.SetValue("URLUpdateInfo", $"https://github.com/{App.ProjectRepository}/releases/latest"); - } - - App.Logger.WriteLine(LOG_IDENT, "Registered application"); - } - public void RegisterProgramSize() { const string LOG_IDENT = "Bootstrapper::RegisterProgramSize"; @@ -539,57 +479,6 @@ namespace Bloxstrap ProtocolHandler.RegisterExtension(".rbxl"); ProtocolHandler.RegisterExtension(".rbxlx"); #endif - - if (Environment.ProcessPath is not null && Environment.ProcessPath != Paths.Application) - { - // in case the user is reinstalling - if (File.Exists(Paths.Application) && App.IsFirstRun) - { - Filesystem.AssertReadOnly(Paths.Application); - File.Delete(Paths.Application); - } - - // check to make sure bootstrapper is in the install folder - if (!File.Exists(Paths.Application)) - File.Copy(Environment.ProcessPath, Paths.Application); - } - - // this SHOULD go under Register(), - // but then people who have Bloxstrap v1.0.0 installed won't have this without a reinstall - // maybe in a later version? - if (!Directory.Exists(Paths.StartMenu)) - { - Directory.CreateDirectory(Paths.StartMenu); - } - else - { - // v2.0.0 - rebadge configuration menu as just "Bloxstrap Menu" - string oldMenuShortcut = Path.Combine(Paths.StartMenu, $"Configure {App.ProjectName}.lnk"); - - if (File.Exists(oldMenuShortcut)) - File.Delete(oldMenuShortcut); - } - - Utility.Shortcut.Create(Paths.Application, "", Path.Combine(Paths.StartMenu, "Play Roblox.lnk")); - Utility.Shortcut.Create(Paths.Application, "-menu", Path.Combine(Paths.StartMenu, $"{App.ProjectName} Menu.lnk")); -#if STUDIO_FEATURES - Utility.Shortcut.Create(Paths.Application, "-ide", Path.Combine(Paths.StartMenu, $"Roblox Studio ({App.ProjectName}).lnk")); -#endif - - if (App.Settings.Prop.CreateDesktopIcon) - { - try - { - Utility.Shortcut.Create(Paths.Application, "", Path.Combine(Paths.Desktop, "Play Roblox.lnk")); - - // one-time toggle, set it back to false - App.Settings.Prop.CreateDesktopIcon = false; - } - catch (Exception) - { - // suppress, we likely just don't have write perms for the desktop folder - } - } } private async Task CheckForUpdates() @@ -606,6 +495,7 @@ namespace Bloxstrap App.Logger.WriteLine(LOG_IDENT, $"Checking for updates..."); GithubRelease? releaseInfo; + try { releaseInfo = await Http.GetJson($"https://api.github.com/repos/{App.ProjectRepository}/releases/latest"); @@ -622,16 +512,16 @@ namespace Bloxstrap return; } - int versionComparison = Utilities.CompareVersions(App.Version, releaseInfo.TagName); + var versionComparison = Utilities.CompareVersions(App.Version, releaseInfo.TagName); // check if we aren't using a deployed build, so we can update to one if a new version comes out - if (versionComparison == 0 && App.BuildMetadata.CommitRef.StartsWith("tag") || versionComparison == 1) + if (versionComparison == VersionComparison.Equal && App.BuildMetadata.CommitRef.StartsWith("tag") || versionComparison == VersionComparison.GreaterThan) { App.Logger.WriteLine(LOG_IDENT, $"No updates found"); return; } - SetStatus(Resources.Strings.Bootstrapper_Status_UpgradingBloxstrap); + SetStatus(Strings.Bootstrapper_Status_UpgradingBloxstrap); try { @@ -660,7 +550,6 @@ namespace Bloxstrap startInfo.ArgumentList.Add(arg); App.Settings.Save(); - App.ShouldSaveConfigs = false; Process.Start(startInfo); @@ -672,177 +561,11 @@ namespace Bloxstrap App.Logger.WriteException(LOG_IDENT, ex); Frontend.ShowMessageBox( - string.Format(Resources.Strings.Bootstrapper_AutoUpdateFailed, releaseInfo.TagName), + string.Format(Strings.Bootstrapper_AutoUpdateFailed, releaseInfo.TagName), MessageBoxImage.Information ); } } - - private void Uninstall() - { - const string LOG_IDENT = "Bootstrapper::Uninstall"; - - // prompt to shutdown roblox if its currently running - if (Process.GetProcessesByName(App.RobloxPlayerAppName).Any() || Process.GetProcessesByName(App.RobloxStudioAppName).Any()) - { - App.Logger.WriteLine(LOG_IDENT, $"Prompting to shut down all open Roblox instances"); - - MessageBoxResult result = Frontend.ShowMessageBox( - Resources.Strings.Bootstrapper_Uninstall_RobloxRunning, - MessageBoxImage.Information, - MessageBoxButton.OKCancel - ); - - if (result != MessageBoxResult.OK) - App.Terminate(ErrorCode.ERROR_CANCELLED); - - try - { - foreach (Process process in Process.GetProcessesByName(App.RobloxPlayerAppName)) - { - process.Kill(); - process.Close(); - } - -#if STUDIO_FEATURES - foreach (Process process in Process.GetProcessesByName(App.RobloxStudioAppName)) - { - process.Kill(); - process.Close(); - } -#endif - } - catch (Exception ex) - { - App.Logger.WriteLine(LOG_IDENT, $"Failed to close process! {ex}"); - } - - App.Logger.WriteLine(LOG_IDENT, $"All Roblox processes closed"); - } - - SetStatus(Resources.Strings.Bootstrapper_Status_Uninstalling); - - App.ShouldSaveConfigs = false; - bool robloxPlayerStillInstalled = true; - bool robloxStudioStillInstalled = true; - - // check if stock bootstrapper is still installed - using RegistryKey? bootstrapperKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\roblox-player"); - if (bootstrapperKey is null) - { - robloxPlayerStillInstalled = false; - - ProtocolHandler.Unregister("roblox"); - ProtocolHandler.Unregister("roblox-player"); - } - else - { - // revert launch uri handler to stock bootstrapper - - string bootstrapperLocation = (string?)bootstrapperKey.GetValue("InstallLocation") + "RobloxPlayerLauncher.exe"; - - ProtocolHandler.Register("roblox", "Roblox", bootstrapperLocation); - ProtocolHandler.Register("roblox-player", "Roblox", bootstrapperLocation); - } - -#if STUDIO_FEATURES - using RegistryKey? studioBootstrapperKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\roblox-studio"); - if (studioBootstrapperKey is null) - { - robloxStudioStillInstalled = false; - - ProtocolHandler.Unregister("roblox-studio"); - ProtocolHandler.Unregister("roblox-studio-auth"); - - ProtocolHandler.Unregister("Roblox.Place"); - ProtocolHandler.Unregister(".rbxl"); - ProtocolHandler.Unregister(".rbxlx"); - } - else - { - string studioLocation = (string?)studioBootstrapperKey.GetValue("InstallLocation") + "RobloxStudioBeta.exe"; // points to studio exe instead of bootstrapper - ProtocolHandler.Register("roblox-studio", "Roblox", studioLocation); - ProtocolHandler.Register("roblox-studio-auth", "Roblox", studioLocation); - - ProtocolHandler.RegisterRobloxPlace(studioLocation); - } -#endif - - // if the folder we're installed to does not end with "Bloxstrap", we're installed to a user-selected folder - // in which case, chances are they chose to install to somewhere they didn't really mean to (prior to the added warning in 2.4.0) - // if so, we're walking on eggshells and have to ensure we only clean up what we need to clean up - bool cautiousUninstall = !Paths.Base.ToLower().EndsWith(App.ProjectName.ToLower()); - - var cleanupSequence = new List - { - () => Registry.CurrentUser.DeleteSubKey($@"Software\{App.ProjectName}"), - () => Directory.Delete(Paths.StartMenu, true), - () => File.Delete(Path.Combine(Paths.Desktop, "Play Roblox.lnk")), - () => Registry.CurrentUser.DeleteSubKey($@"Software\Microsoft\Windows\CurrentVersion\Uninstall\{App.ProjectName}") - }; - - if (cautiousUninstall) - { - cleanupSequence.Add(() => Directory.Delete(Paths.Downloads, true)); - cleanupSequence.Add(() => Directory.Delete(Paths.Modifications, true)); - cleanupSequence.Add(() => Directory.Delete(Paths.Versions, true)); - cleanupSequence.Add(() => Directory.Delete(Paths.Logs, true)); - - cleanupSequence.Add(() => File.Delete(App.Settings.FileLocation)); - cleanupSequence.Add(() => File.Delete(App.State.FileLocation)); - } - else - { - cleanupSequence.Add(() => Directory.Delete(Paths.Base, true)); - } - - string robloxFolder = Path.Combine(Paths.LocalAppData, "Roblox"); - - if (!robloxPlayerStillInstalled && !robloxStudioStillInstalled && Directory.Exists(robloxFolder)) - cleanupSequence.Add(() => Directory.Delete(robloxFolder, true)); - - foreach (var process in cleanupSequence) - { - try - { - process(); - } - catch (Exception ex) - { - App.Logger.WriteLine(LOG_IDENT, $"Encountered exception when running cleanup sequence (#{cleanupSequence.IndexOf(process)})"); - App.Logger.WriteException(LOG_IDENT, ex); - } - } - - Action? callback = null; - - if (Directory.Exists(Paths.Base)) - { - callback = delegate - { - // this is definitely one of the workaround hacks of all time - // could antiviruses falsely detect this as malicious behaviour though? - // "hmm whats this program doing running a cmd command chain quietly in the background that auto deletes an entire folder" - - string deleteCommand; - - if (cautiousUninstall) - deleteCommand = $"del /Q \"{Paths.Application}\""; - else - deleteCommand = $"del /Q \"{Paths.Base}\\*\" && rmdir \"{Paths.Base}\""; - - Process.Start(new ProcessStartInfo() - { - FileName = "cmd.exe", - Arguments = $"/c timeout 5 && {deleteCommand}", - UseShellExecute = true, - WindowStyle = ProcessWindowStyle.Hidden - }); - }; - } - - Dialog?.ShowSuccess(Resources.Strings.Bootstrapper_SuccessfullyUninstalled, callback); - } #endregion #region Roblox Install @@ -852,7 +575,7 @@ namespace Bloxstrap _isInstalling = true; - SetStatus(FreshInstall ? Resources.Strings.Bootstrapper_Status_Installing : Resources.Strings.Bootstrapper_Status_Upgrading); + SetStatus(FreshInstall ? Strings.Bootstrapper_Status_Installing : Strings.Bootstrapper_Status_Upgrading); Directory.CreateDirectory(Paths.Base); Directory.CreateDirectory(Paths.Downloads); @@ -866,7 +589,7 @@ namespace Bloxstrap if (Filesystem.GetFreeDiskSpace(Paths.Base) < totalSizeRequired) { Frontend.ShowMessageBox( - Resources.Strings.Bootstrapper_NotEnoughSpace, + Strings.Bootstrapper_NotEnoughSpace, MessageBoxImage.Error ); @@ -911,7 +634,7 @@ namespace Bloxstrap if (Dialog is not null) { Dialog.ProgressStyle = ProgressBarStyle.Marquee; - SetStatus(Resources.Strings.Bootstrapper_Status_Configuring); + SetStatus(Strings.Bootstrapper_Status_Configuring); } // wait for all packages to finish extracting, with an exception for the webview2 runtime installer @@ -996,7 +719,7 @@ namespace Bloxstrap } // don't register program size until the program is registered, which will be done after this - if (!App.IsFirstRun && !FreshInstall) + if (!FreshInstall) RegisterProgramSize(); if (Dialog is not null) @@ -1004,20 +727,10 @@ namespace Bloxstrap _isInstalling = false; } - + private async Task InstallWebView2() { const string LOG_IDENT = "Bootstrapper::InstallWebView2"; - - // check if the webview2 runtime needs to be installed - // webview2 can either be installed be per-user or globally, so we need to check in both hklm and hkcu - // https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#detect-if-a-suitable-webview2-runtime-is-already-installed - - using RegistryKey? hklmKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}"); - using RegistryKey? hkcuKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}"); - - if (hklmKey is not null || hkcuKey is not null) - return; App.Logger.WriteLine(LOG_IDENT, "Installing runtime..."); @@ -1036,7 +749,7 @@ namespace Bloxstrap await ExtractPackage(package); } - SetStatus(Resources.Strings.Bootstrapper_Status_InstallingWebView2); + SetStatus(Strings.Bootstrapper_Status_InstallingWebView2); ProcessStartInfo startInfo = new() { @@ -1065,7 +778,7 @@ namespace Bloxstrap if (File.Exists(injectorLocation)) { Frontend.ShowMessageBox( - Resources.Strings.Bootstrapper_HyperionUpdateInfo, + Strings.Bootstrapper_HyperionUpdateInfo, MessageBoxImage.Warning ); @@ -1086,7 +799,7 @@ namespace Bloxstrap return; } - SetStatus(Resources.Strings.Bootstrapper_Status_ApplyingModifications); + SetStatus(Strings.Bootstrapper_Status_ApplyingModifications); // set executable flags for fullscreen optimizations App.Logger.WriteLine(LOG_IDENT, "Checking executable flags..."); @@ -1212,12 +925,6 @@ namespace Bloxstrap string modFontFamiliesFolder = Path.Combine(Paths.Modifications, "content\\fonts\\families"); - if (App.IsFirstRun && App.CustomFontLocation is not null) - { - Directory.CreateDirectory(Path.GetDirectoryName(Paths.CustomFont)!); - File.Copy(App.CustomFontLocation, Paths.CustomFont, true); - } - if (File.Exists(Paths.CustomFont)) { App.Logger.WriteLine(LOG_IDENT, "Begin font check"); diff --git a/Bloxstrap/Enums/ErrorCode.cs b/Bloxstrap/Enums/ErrorCode.cs index f6b6609..4d830dd 100644 --- a/Bloxstrap/Enums/ErrorCode.cs +++ b/Bloxstrap/Enums/ErrorCode.cs @@ -9,9 +9,11 @@ { ERROR_SUCCESS = 0, ERROR_INVALID_FUNCTION = 1, + ERROR_FILE_NOT_FOUND = 2, + + ERROR_CANCELLED = 1223, ERROR_INSTALL_USEREXIT = 1602, ERROR_INSTALL_FAILURE = 1603, - ERROR_CANCELLED = 1223, CO_E_APPNOTFOUND = -2147221003 } diff --git a/Bloxstrap/Enums/NextAction.cs b/Bloxstrap/Enums/NextAction.cs new file mode 100644 index 0000000..cf804f7 --- /dev/null +++ b/Bloxstrap/Enums/NextAction.cs @@ -0,0 +1,9 @@ +namespace Bloxstrap.Enums +{ + public enum NextAction + { + Terminate, + LaunchSettings, + LaunchRoblox + } +} diff --git a/Bloxstrap/Enums/VersionComparison.cs b/Bloxstrap/Enums/VersionComparison.cs new file mode 100644 index 0000000..8f65958 --- /dev/null +++ b/Bloxstrap/Enums/VersionComparison.cs @@ -0,0 +1,9 @@ +namespace Bloxstrap.Enums +{ + enum VersionComparison + { + LessThan = -1, + Equal = 0, + GreaterThan = 1 + } +} diff --git a/Bloxstrap/InstallChecker.cs b/Bloxstrap/InstallChecker.cs deleted file mode 100644 index 66989ef..0000000 --- a/Bloxstrap/InstallChecker.cs +++ /dev/null @@ -1,279 +0,0 @@ -using System.Windows; -using Microsoft.Win32; - -namespace Bloxstrap -{ - internal class InstallChecker : IDisposable - { - private RegistryKey? _registryKey; - private string? _installLocation; - - internal InstallChecker() - { - _registryKey = Registry.CurrentUser.OpenSubKey($"Software\\{App.ProjectName}", true); - - if (_registryKey is not null) - _installLocation = (string?)_registryKey.GetValue("InstallLocation"); - } - - internal void Check() - { - const string LOG_IDENT = "InstallChecker::Check"; - - if (_registryKey is null || _installLocation is null) - { - if (!File.Exists("Settings.json") || !File.Exists("State.json")) - { - FirstTimeRun(); - return; - } - - App.Logger.WriteLine(LOG_IDENT, "Installation registry key is likely malformed"); - - _installLocation = Path.GetDirectoryName(Paths.Process)!; - - var result = Frontend.ShowMessageBox( - string.Format(Resources.Strings.InstallChecker_NotInstalledProperly, _installLocation), - MessageBoxImage.Warning, - MessageBoxButton.YesNo - ); - - if (result != MessageBoxResult.Yes) - { - FirstTimeRun(); - return; - } - - App.Logger.WriteLine(LOG_IDENT, $"Setting install location as '{_installLocation}'"); - - if (_registryKey is null) - _registryKey = Registry.CurrentUser.CreateSubKey($"Software\\{App.ProjectName}"); - - _registryKey.SetValue("InstallLocation", _installLocation); - } - - // check if drive that bloxstrap was installed to was removed from system, or had its drive letter changed - - if (!Directory.Exists(_installLocation)) - { - App.Logger.WriteLine(LOG_IDENT, "Could not find install location. Checking if drive has changed..."); - - bool driveExists = false; - string driveName = _installLocation[..3]; - string? newDriveName = null; - - foreach (var drive in DriveInfo.GetDrives()) - { - if (drive.Name == driveName) - driveExists = true; - else if (Directory.Exists(_installLocation.Replace(driveName, drive.Name))) - newDriveName = drive.Name; - } - - if (newDriveName is not null) - { - App.Logger.WriteLine(LOG_IDENT, $"Drive has changed from {driveName} to {newDriveName}"); - - Frontend.ShowMessageBox( - string.Format(Resources.Strings.InstallChecker_DriveLetterChangeDetected, driveName, newDriveName), - MessageBoxImage.Warning, - MessageBoxButton.OK - ); - - _installLocation = _installLocation.Replace(driveName, newDriveName); - _registryKey.SetValue("InstallLocation", _installLocation); - } - else if (!driveExists) - { - App.Logger.WriteLine(LOG_IDENT, $"Drive {driveName} does not exist anymore, and has likely been removed"); - - var result = Frontend.ShowMessageBox( - string.Format(Resources.Strings.InstallChecker_InstallDriveMissing, driveName), - MessageBoxImage.Warning, - MessageBoxButton.OKCancel - ); - - if (result != MessageBoxResult.OK) - App.Terminate(); - - FirstTimeRun(); - return; - } - else - { - App.Logger.WriteLine(LOG_IDENT, "Drive has not changed, folder was likely moved or deleted"); - } - } - - App.BaseDirectory = _installLocation; - App.IsFirstRun = false; - } - - public void Dispose() - { - _registryKey?.Dispose(); - GC.SuppressFinalize(this); - } - - private static void FirstTimeRun() - { - const string LOG_IDENT = "InstallChecker::FirstTimeRun"; - - App.Logger.WriteLine(LOG_IDENT, "Running first-time install"); - - App.BaseDirectory = Path.Combine(Paths.LocalAppData, App.ProjectName); - App.Logger.Initialize(true); - - if (App.LaunchSettings.IsQuiet) - return; - - App.IsSetupComplete = false; - - App.FastFlags.Load(); - Frontend.ShowLanguageSelection(); - Frontend.ShowMenu(); - - // exit if we don't click the install button on installation - if (App.IsSetupComplete) - return; - - App.Logger.WriteLine(LOG_IDENT, "Installation cancelled!"); - App.Terminate(ErrorCode.ERROR_CANCELLED); - } - - internal static void CheckUpgrade() - { - const string LOG_IDENT = "InstallChecker::CheckUpgrade"; - - if (!File.Exists(Paths.Application) || Paths.Process == Paths.Application) - return; - - // 2.0.0 downloads updates to /Updates so lol - bool isAutoUpgrade = Paths.Process.StartsWith(Path.Combine(Paths.Base, "Updates")) || Paths.Process.StartsWith(Path.Combine(Paths.LocalAppData, "Temp")); - - FileVersionInfo existingVersionInfo = FileVersionInfo.GetVersionInfo(Paths.Application); - FileVersionInfo currentVersionInfo = FileVersionInfo.GetVersionInfo(Paths.Process); - - if (MD5Hash.FromFile(Paths.Process) == MD5Hash.FromFile(Paths.Application)) - return; - - MessageBoxResult result; - - // silently upgrade version if the command line flag is set or if we're launching from an auto update - if (App.LaunchSettings.IsUpgrade || isAutoUpgrade) - { - result = MessageBoxResult.Yes; - } - else - { - result = Frontend.ShowMessageBox( - Resources.Strings.InstallChecker_VersionDifferentThanInstalled, - MessageBoxImage.Question, - MessageBoxButton.YesNo - ); - } - - if (result != MessageBoxResult.Yes) - return; - - Filesystem.AssertReadOnly(Paths.Application); - - // yes, this is EXTREMELY hacky, but the updater process that launched the - // new version may still be open and so we have to wait for it to close - int attempts = 0; - while (attempts < 10) - { - attempts++; - - try - { - File.Delete(Paths.Application); - break; - } - catch (Exception) - { - if (attempts == 1) - App.Logger.WriteLine(LOG_IDENT, "Waiting for write permissions to update version"); - - Thread.Sleep(500); - } - } - - if (attempts == 10) - { - App.Logger.WriteLine(LOG_IDENT, "Failed to update! (Could not get write permissions after 5 seconds)"); - return; - } - - File.Copy(Paths.Process, Paths.Application); - - Bootstrapper.Register(); - - // update migrations - - if (App.BuildMetadata.CommitRef.StartsWith("tag") && currentVersionInfo.ProductVersion is not null) - { - if (existingVersionInfo.ProductVersion == "2.4.0") - { - App.FastFlags.SetValue("DFFlagDisableDPIScale", null); - App.FastFlags.SetValue("DFFlagVariableDPIScale2", null); - App.FastFlags.Save(); - } - else if (existingVersionInfo.ProductVersion == "2.5.0") - { - App.FastFlags.SetValue("FIntDebugForceMSAASamples", null); - - if (App.FastFlags.GetPreset("UI.Menu.Style.DisableV2") is not null) - App.FastFlags.SetPreset("UI.Menu.Style.ABTest", false); - - App.FastFlags.Save(); - } - else if (existingVersionInfo.ProductVersion == "2.5.4") - { - if (App.Settings.Prop.UseDisableAppPatch) - { - try - { - File.Delete(Path.Combine(Paths.Modifications, "ExtraContent\\places\\Mobile.rbxl")); - } - catch (Exception ex) - { - App.Logger.WriteException(LOG_IDENT, ex); - } - - App.Settings.Prop.EnableActivityTracking = true; - } - - if (App.Settings.Prop.BootstrapperStyle == BootstrapperStyle.ClassicFluentDialog) - App.Settings.Prop.BootstrapperStyle = BootstrapperStyle.FluentDialog; - - _ = int.TryParse(App.FastFlags.GetPreset("Rendering.Framerate"), out int x); - if (x == 0) - { - App.FastFlags.SetPreset("Rendering.Framerate", null); - App.FastFlags.Save(); - } - - App.Settings.Save(); - } - } - - if (isAutoUpgrade) - { - Utilities.ShellExecute($"https://github.com/{App.ProjectRepository}/wiki/Release-notes-for-Bloxstrap-v{currentVersionInfo.ProductVersion}"); - } - else if (!App.LaunchSettings.IsQuiet) - { - Frontend.ShowMessageBox( - string.Format(Resources.Strings.InstallChecker_Updated, currentVersionInfo.ProductVersion), - MessageBoxImage.Information, - MessageBoxButton.OK - ); - - Frontend.ShowMenu(); - - App.Terminate(); - } - } - } -} diff --git a/Bloxstrap/Installer.cs b/Bloxstrap/Installer.cs new file mode 100644 index 0000000..817b337 --- /dev/null +++ b/Bloxstrap/Installer.cs @@ -0,0 +1,470 @@ +using System.DirectoryServices; +using System.Reflection; +using System.Reflection.Metadata.Ecma335; +using System.Windows; +using System.Windows.Media.Animation; +using Bloxstrap.Resources; +using Microsoft.Win32; + +namespace Bloxstrap +{ + internal class Installer + { + private static string DesktopShortcut => Path.Combine(Paths.Desktop, "Bloxstrap.lnk"); + + private static string StartMenuShortcut => Path.Combine(Paths.WindowsStartMenu, "Bloxstrap.lnk"); + + public string InstallLocation = Path.Combine(Paths.LocalAppData, "Bloxstrap"); + + public bool CreateDesktopShortcuts = true; + + public bool CreateStartMenuShortcuts = true; + + public bool IsImplicitInstall = false; + + public string InstallLocationError { get; set; } = ""; + + public void DoInstall() + { + // should've been created earlier from the write test anyway + Directory.CreateDirectory(InstallLocation); + + Paths.Initialize(InstallLocation); + + if (!IsImplicitInstall) + { + Filesystem.AssertReadOnly(Paths.Application); + File.Copy(Paths.Process, Paths.Application, true); + } + + // TODO: registry access checks, i'll need to look back on issues to see what the error looks like + using (var uninstallKey = Registry.CurrentUser.CreateSubKey(App.UninstallKey)) + { + uninstallKey.SetValue("DisplayIcon", $"{Paths.Application},0"); + uninstallKey.SetValue("DisplayName", App.ProjectName); + + uninstallKey.SetValue("DisplayVersion", App.Version); + + if (uninstallKey.GetValue("InstallDate") is null) + uninstallKey.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd")); + + uninstallKey.SetValue("InstallLocation", Paths.Base); + uninstallKey.SetValue("NoRepair", 1); + uninstallKey.SetValue("Publisher", "pizzaboxer"); + uninstallKey.SetValue("ModifyPath", $"\"{Paths.Application}\" -settings"); + uninstallKey.SetValue("QuietUninstallString", $"\"{Paths.Application}\" -uninstall -quiet"); + uninstallKey.SetValue("UninstallString", $"\"{Paths.Application}\" -uninstall"); + uninstallKey.SetValue("URLInfoAbout", $"https://github.com/{App.ProjectRepository}"); + uninstallKey.SetValue("URLUpdateInfo", $"https://github.com/{App.ProjectRepository}/releases/latest"); + } + + // only register player, for the scenario where the user installs bloxstrap, closes it, + // and then launches from the website expecting it to work + // studio can be implicitly registered when it's first launched manually + ProtocolHandler.Register("roblox", "Roblox", Paths.Application); + ProtocolHandler.Register("roblox-player", "Roblox", Paths.Application); + + // TODO: implicit installation needs to reregister studio + + if (CreateDesktopShortcuts) + Shortcut.Create(Paths.Application, "", DesktopShortcut); + + if (CreateStartMenuShortcuts) + Shortcut.Create(Paths.Application, "", StartMenuShortcut); + + // existing configuration persisting from an earlier install + App.Settings.Load(); + App.State.Load(); + App.FastFlags.Load(); + } + + private bool ValidateLocation() + { + // prevent from installing to the root of a drive + if (InstallLocation.Length <= 3) + return false; + + // unc path, just to be safe + if (InstallLocation.StartsWith("\\\\")) + return false; + + // prevent from installing to a onedrive folder + if (InstallLocation.Contains("OneDrive", StringComparison.InvariantCultureIgnoreCase)) + return false; + + // prevent from installing to an essential user profile folder (e.g. Documents, Downloads, Contacts idk) + if (String.Compare(Directory.GetParent(InstallLocation)?.FullName, Paths.UserProfile, StringComparison.InvariantCultureIgnoreCase) == 0) + return false; + + return true; + } + + public bool CheckInstallLocation() + { + if (string.IsNullOrEmpty(InstallLocation)) + { + InstallLocationError = Strings.Menu_InstallLocation_NotSet; + } + else if (!ValidateLocation()) + { + InstallLocationError = Strings.Menu_InstallLocation_CantInstall; + } + else + { + if (!IsImplicitInstall + && !InstallLocation.EndsWith(App.ProjectName, StringComparison.InvariantCultureIgnoreCase) + && Directory.Exists(InstallLocation) + && Directory.EnumerateFileSystemEntries(InstallLocation).Any()) + { + string suggestedChange = Path.Combine(InstallLocation, App.ProjectName); + + MessageBoxResult result = Frontend.ShowMessageBox( + String.Format(Strings.Menu_InstallLocation_NotEmpty, suggestedChange), + MessageBoxImage.Warning, + MessageBoxButton.YesNoCancel, + MessageBoxResult.Yes + ); + + if (result == MessageBoxResult.Yes) + InstallLocation = suggestedChange; + else if (result == MessageBoxResult.Cancel || result == MessageBoxResult.None) + return false; + } + + try + { + // check if we can write to the directory (a bit hacky but eh) + string testFile = Path.Combine(InstallLocation, $"{App.ProjectName}WriteTest.txt"); + + Directory.CreateDirectory(InstallLocation); + File.WriteAllText(testFile, ""); + File.Delete(testFile); + } + catch (UnauthorizedAccessException) + { + InstallLocationError = Strings.Menu_InstallLocation_NoWritePerms; + } + catch (Exception ex) + { + InstallLocationError = ex.Message; + } + } + + return String.IsNullOrEmpty(InstallLocationError); + } + + public static void DoUninstall(bool keepData) + { + const string LOG_IDENT = "Installer::DoUninstall"; + + var processes = new List(); + processes.AddRange(Process.GetProcessesByName(App.RobloxPlayerAppName)); + +#if STUDIO_FEATURES + processes.AddRange(Process.GetProcessesByName(App.RobloxStudioAppName)); +#endif + + // prompt to shutdown roblox if its currently running + if (processes.Any()) + { + if (!App.LaunchSettings.IsQuiet) + { + MessageBoxResult result = Frontend.ShowMessageBox( + Strings.Bootstrapper_Uninstall_RobloxRunning, + MessageBoxImage.Information, + MessageBoxButton.OKCancel + ); + + if (result != MessageBoxResult.OK) + App.Terminate(ErrorCode.ERROR_CANCELLED); + } + + try + { + foreach (var process in processes) + { + process.Kill(); + process.Close(); + } + } + catch (Exception ex) + { + App.Logger.WriteLine(LOG_IDENT, $"Failed to close process! {ex}"); + } + } + + string robloxFolder = Path.Combine(Paths.LocalAppData, "Roblox"); + bool playerStillInstalled = true; + bool studioStillInstalled = true; + + // check if stock bootstrapper is still installed + using var playerKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\roblox-player"); + var playerFolder = playerKey?.GetValue("InstallLocation"); + + if (playerKey is null || playerFolder is not string) + { + playerStillInstalled = false; + + ProtocolHandler.Unregister("roblox"); + ProtocolHandler.Unregister("roblox-player"); + } + else + { + // revert launch uri handler to stock bootstrapper + string playerPath = Path.Combine((string)playerFolder, "RobloxPlayerBeta.exe"); + + ProtocolHandler.Register("roblox", "Roblox", playerPath); + ProtocolHandler.Register("roblox-player", "Roblox", playerPath); + } + + using RegistryKey? studioBootstrapperKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\roblox-studio"); + if (studioBootstrapperKey is null) + { + studioStillInstalled = false; + +#if STUDIO_FEATURES + ProtocolHandler.Unregister("roblox-studio"); + ProtocolHandler.Unregister("roblox-studio-auth"); + + ProtocolHandler.Unregister("Roblox.Place"); + ProtocolHandler.Unregister(".rbxl"); + ProtocolHandler.Unregister(".rbxlx"); +#endif + } +#if STUDIO_FEATURES + else + { + string studioLocation = (string?)studioBootstrapperKey.GetValue("InstallLocation") + "RobloxStudioBeta.exe"; // points to studio exe instead of bootstrapper + ProtocolHandler.Register("roblox-studio", "Roblox", studioLocation); + ProtocolHandler.Register("roblox-studio-auth", "Roblox", studioLocation); + + ProtocolHandler.RegisterRobloxPlace(studioLocation); + } +#endif + + var cleanupSequence = new List + { + () => File.Delete(DesktopShortcut), + () => File.Delete(StartMenuShortcut), + + () => Directory.Delete(Paths.Versions, true), + () => Directory.Delete(Paths.Downloads, true), + }; + + if (!keepData) + { + cleanupSequence.AddRange(new List + { + () => Directory.Delete(Paths.Modifications, true), + () => Directory.Delete(Paths.Logs, true), + + () => File.Delete(App.Settings.FileLocation), + () => File.Delete(App.State.FileLocation), // TODO: maybe this should always be deleted? not sure yet + }); + } + + bool deleteFolder = false; + + if (Directory.Exists(Paths.Base)) + { + var folderFiles = Directory.GetFiles(Paths.Base); + deleteFolder = folderFiles.Length == 1 && folderFiles.First().EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase); + } + + if (deleteFolder) + cleanupSequence.Add(() => Directory.Delete(Paths.Base, true)); + + if (!playerStillInstalled && !studioStillInstalled && Directory.Exists(robloxFolder)) + cleanupSequence.Add(() => Directory.Delete(robloxFolder, true)); + + cleanupSequence.Add(() => Registry.CurrentUser.DeleteSubKey(App.UninstallKey)); + + foreach (var process in cleanupSequence) + { + try + { + process(); + } + catch (Exception ex) + { + App.Logger.WriteLine(LOG_IDENT, $"Encountered exception when running cleanup sequence (#{cleanupSequence.IndexOf(process)})"); + App.Logger.WriteException(LOG_IDENT, ex); + } + } + + if (Directory.Exists(Paths.Base)) + { + // this is definitely one of the workaround hacks of all time + + string deleteCommand; + + if (deleteFolder) + deleteCommand = $"del /Q \"{Paths.Base}\\*\" && rmdir \"{Paths.Base}\""; + else + deleteCommand = $"del /Q \"{Paths.Application}\""; + + Process.Start(new ProcessStartInfo() + { + FileName = "cmd.exe", + Arguments = $"/c timeout 5 && {deleteCommand}", + UseShellExecute = true, + WindowStyle = ProcessWindowStyle.Hidden + }); + } + } + + public static void HandleUpgrade() + { + const string LOG_IDENT = "Installer::HandleUpgrade"; + + if (!File.Exists(Paths.Application) || Paths.Process == Paths.Application) + return; + + // 2.0.0 downloads updates to /Updates so lol + // TODO: 2.8.0 will download them to /Bloxstrap/Updates + bool isAutoUpgrade = Paths.Process.StartsWith(Path.Combine(Paths.Base, "Updates")) || Paths.Process.StartsWith(Path.Combine(Paths.LocalAppData, "Temp")); + + var existingVer = FileVersionInfo.GetVersionInfo(Paths.Application).ProductVersion; + var currentVer = FileVersionInfo.GetVersionInfo(Paths.Process).ProductVersion; + + if (MD5Hash.FromFile(Paths.Process) == MD5Hash.FromFile(Paths.Application)) + return; + + // silently upgrade version if the command line flag is set or if we're launching from an auto update + if (!App.LaunchSettings.IsUpgrade && !isAutoUpgrade) + { + var result = Frontend.ShowMessageBox( + Strings.InstallChecker_VersionDifferentThanInstalled, + MessageBoxImage.Question, + MessageBoxButton.YesNo + ); + + if (result != MessageBoxResult.Yes) + return; + } + + Filesystem.AssertReadOnly(Paths.Application); + + // TODO: make this use a mutex somehow + // yes, this is EXTREMELY hacky, but the updater process that launched the + // new version may still be open and so we have to wait for it to close + int attempts = 0; + while (attempts < 10) + { + attempts++; + + try + { + File.Delete(Paths.Application); + break; + } + catch (Exception) + { + if (attempts == 1) + App.Logger.WriteLine(LOG_IDENT, "Waiting for write permissions to update version"); + + Thread.Sleep(500); + } + } + + if (attempts == 10) + { + App.Logger.WriteLine(LOG_IDENT, "Failed to update! (Could not get write permissions after 5 seconds)"); + return; + } + + File.Copy(Paths.Process, Paths.Application); + + using (var uninstallKey = Registry.CurrentUser.CreateSubKey(App.UninstallKey)) + { + uninstallKey.SetValue("DisplayVersion", App.Version); + } + + // update migrations + + if (existingVer is not null) + { + if (Utilities.CompareVersions(existingVer, "2.5.0") == VersionComparison.LessThan) + { + App.FastFlags.SetValue("DFFlagDisableDPIScale", null); + App.FastFlags.SetValue("DFFlagVariableDPIScale2", null); + } + + if (Utilities.CompareVersions(existingVer, "2.5.1") == VersionComparison.LessThan) + { + App.FastFlags.SetValue("FIntDebugForceMSAASamples", null); + + if (App.FastFlags.GetPreset("UI.Menu.Style.DisableV2") is not null) + App.FastFlags.SetPreset("UI.Menu.Style.ABTest", false); + } + + if (Utilities.CompareVersions(existingVer, "2.6.0") == VersionComparison.LessThan) + { + if (App.Settings.Prop.UseDisableAppPatch) + { + try + { + File.Delete(Path.Combine(Paths.Modifications, "ExtraContent\\places\\Mobile.rbxl")); + } + catch (Exception ex) + { + App.Logger.WriteException(LOG_IDENT, ex); + } + + App.Settings.Prop.EnableActivityTracking = true; + } + + if (App.Settings.Prop.BootstrapperStyle == BootstrapperStyle.ClassicFluentDialog) + App.Settings.Prop.BootstrapperStyle = BootstrapperStyle.FluentDialog; + + _ = int.TryParse(App.FastFlags.GetPreset("Rendering.Framerate"), out int x); + if (x == 0) + { + App.FastFlags.SetPreset("Rendering.Framerate", null); + } + } + + if (Utilities.CompareVersions(existingVer, "2.8.0") == VersionComparison.LessThan) + { + string oldDesktopPath = Path.Combine(Paths.Desktop, "Play Roblox.lnk"); + string oldStartPath = Path.Combine(Paths.WindowsStartMenu, "Bloxstrap"); + + if (File.Exists(oldDesktopPath)) + File.Move(oldDesktopPath, DesktopShortcut); + + if (Directory.Exists(oldStartPath)) + { + try + { + Directory.Delete(oldStartPath, true); + } + catch (Exception ex) + { + App.Logger.WriteException(LOG_IDENT, ex); + } + + Shortcut.Create(Paths.Application, "", StartMenuShortcut); + } + + Registry.CurrentUser.DeleteSubKeyTree("Software\\Bloxstrap", false); + } + + App.Settings.Save(); + App.FastFlags.Save(); + } + + if (isAutoUpgrade) + { + Utilities.ShellExecute($"https://github.com/{App.ProjectRepository}/wiki/Release-notes-for-Bloxstrap-v{currentVer}"); + } + else if (!App.LaunchSettings.IsQuiet) + { + Frontend.ShowMessageBox( + string.Format(Strings.InstallChecker_Updated, currentVer), + MessageBoxImage.Information, + MessageBoxButton.OK + ); + } + } + } +} diff --git a/Bloxstrap/JsonManager.cs b/Bloxstrap/JsonManager.cs index b002a93..e1078e7 100644 --- a/Bloxstrap/JsonManager.cs +++ b/Bloxstrap/JsonManager.cs @@ -37,12 +37,6 @@ namespace Bloxstrap { string LOG_IDENT = $"{LOG_IDENT_CLASS}::Save"; - if (!App.ShouldSaveConfigs) - { - App.Logger.WriteLine(LOG_IDENT, "Save request ignored"); - return; - } - App.Logger.WriteLine(LOG_IDENT, $"Saving to {FileLocation}..."); Directory.CreateDirectory(Path.GetDirectoryName(FileLocation)!); diff --git a/Bloxstrap/LaunchHandler.cs b/Bloxstrap/LaunchHandler.cs new file mode 100644 index 0000000..cc40ef1 --- /dev/null +++ b/Bloxstrap/LaunchHandler.cs @@ -0,0 +1,230 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +using Bloxstrap.UI.Elements.Dialogs; +using Bloxstrap.Resources; + +using Microsoft.Win32; +using Windows.Win32; +using Windows.Win32.Foundation; + +namespace Bloxstrap +{ + public static class LaunchHandler + { + public static void ProcessNextAction(NextAction action, bool isUnfinishedInstall = false) + { + switch (action) + { + case NextAction.LaunchSettings: + LaunchSettings(); + break; + + case NextAction.LaunchRoblox: + LaunchRoblox(); + break; + + default: + App.Terminate(isUnfinishedInstall ? ErrorCode.ERROR_INSTALL_USEREXIT : ErrorCode.ERROR_SUCCESS); + break; + } + } + + public static void ProcessLaunchArgs() + { + // this order is specific + + if (App.LaunchSettings.IsUninstall) + LaunchUninstaller(); + else if (App.LaunchSettings.IsMenuLaunch) + LaunchSettings(); + else if (App.LaunchSettings.IsRobloxLaunch) + LaunchRoblox(); + else if (!App.LaunchSettings.IsQuiet) + LaunchMenu(); + } + + public static void LaunchInstaller() + { + // TODO: detect duplicate launch, mutex maybe? + + if (App.LaunchSettings.IsUninstall) + { + Frontend.ShowMessageBox(Strings.Bootstrapper_FirstRunUninstall, MessageBoxImage.Error); + App.Terminate(ErrorCode.ERROR_INVALID_FUNCTION); + return; + } + + if (App.LaunchSettings.IsQuiet) + { + var installer = new Installer(); + + if (!installer.CheckInstallLocation()) + App.Terminate(ErrorCode.ERROR_INSTALL_FAILURE); + + installer.DoInstall(); + + ProcessLaunchArgs(); + } + else + { + new LanguageSelectorDialog().ShowDialog(); + + var installer = new UI.Elements.Installer.MainWindow(); + installer.ShowDialog(); + + ProcessNextAction(installer.CloseAction, !installer.Finished); + } + + } + + public static void LaunchUninstaller() + { + bool confirmed = false; + bool keepData = true; + + if (App.LaunchSettings.IsQuiet) + { + confirmed = true; + } + else + { + var dialog = new UninstallerDialog(); + dialog.ShowDialog(); + + confirmed = dialog.Confirmed; + keepData = dialog.KeepData; + } + + if (!confirmed) + return; + + Installer.DoUninstall(keepData); + + Frontend.ShowMessageBox(Strings.Bootstrapper_SuccessfullyUninstalled, MessageBoxImage.Information); + } + + public static void LaunchSettings() + { + const string LOG_IDENT = "LaunchHandler::LaunchSettings"; + + // TODO: move to mutex (especially because multi language whatever) + + Process? menuProcess = Utilities.GetProcessesSafe().Where(x => x.MainWindowTitle == Strings.Menu_Title).FirstOrDefault(); + + if (menuProcess is not null) + { + var handle = menuProcess.MainWindowHandle; + App.Logger.WriteLine(LOG_IDENT, $"Found an already existing menu window with handle {handle}"); + PInvoke.SetForegroundWindow((HWND)handle); + } + else + { + bool showAlreadyRunningWarning = Process.GetProcessesByName(App.ProjectName).Length > 1 && !App.LaunchSettings.IsQuiet; + new UI.Elements.Settings.MainWindow(showAlreadyRunningWarning).ShowDialog(); + } + } + + public static void LaunchMenu() + { + var dialog = new LaunchMenuDialog(); + dialog.ShowDialog(); + + ProcessNextAction(dialog.CloseAction); + } + + public static void LaunchRoblox() + { + const string LOG_IDENT = "LaunchHandler::LaunchRoblox"; + + bool installWebView2 = false; + + if (!File.Exists(Path.Combine(Paths.System, "mfplat.dll"))) + { + Frontend.ShowMessageBox(Strings.Bootstrapper_WMFNotFound, MessageBoxImage.Error); + + if (!App.LaunchSettings.IsQuiet) + Utilities.ShellExecute("https://support.microsoft.com/en-us/topic/media-feature-pack-list-for-windows-n-editions-c1c6fffa-d052-8338-7a79-a4bb980a700a"); + + App.Terminate(ErrorCode.ERROR_FILE_NOT_FOUND); + } + + { + using var hklmKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}"); + using var hkcuKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}"); + + if (hklmKey is null && hkcuKey is null) + installWebView2 = Frontend.ShowMessageBox(Strings.Bootstrapper_WebView2NotFound, MessageBoxImage.Warning, MessageBoxButton.YesNo, MessageBoxResult.Yes) == MessageBoxResult.Yes; + } + + if (App.Settings.Prop.ConfirmLaunches && Mutex.TryOpenExisting("ROBLOX_singletonMutex", out var _)) + { + // this currently doesn't work very well since it relies on checking the existence of the singleton mutex + // which often hangs around for a few seconds after the window closes + // it would be better to have this rely on the activity tracker when we implement IPC in the planned refactoring + + var result = Frontend.ShowMessageBox(Strings.Bootstrapper_ConfirmLaunch, MessageBoxImage.Warning, MessageBoxButton.YesNo); + + if (result != MessageBoxResult.Yes) + { + App.Terminate(); + return; + } + } + + App.NotifyIcon = new(); + + // start bootstrapper and show the bootstrapper modal if we're not running silently + App.Logger.WriteLine(LOG_IDENT, "Initializing bootstrapper"); + var bootstrapper = new Bootstrapper(App.LaunchSettings.RobloxLaunchArgs, App.LaunchSettings.RobloxLaunchMode, installWebView2); + IBootstrapperDialog? dialog = null; + + if (!App.LaunchSettings.IsQuiet) + { + App.Logger.WriteLine(LOG_IDENT, "Initializing bootstrapper dialog"); + dialog = App.Settings.Prop.BootstrapperStyle.GetNew(); + bootstrapper.Dialog = dialog; + dialog.Bootstrapper = bootstrapper; + } + + Task bootstrapperTask = Task.Run(async () => await bootstrapper.Run()).ContinueWith(t => + { + App.Logger.WriteLine(LOG_IDENT, "Bootstrapper task has finished"); + + // notifyicon is blocking main thread, must be disposed here + App.NotifyIcon?.Dispose(); + + if (t.IsFaulted) + App.Logger.WriteLine(LOG_IDENT, "An exception occurred when running the bootstrapper"); + + if (t.Exception is null) + return; + + App.Logger.WriteException(LOG_IDENT, t.Exception); + + Exception exception = t.Exception; + +#if !DEBUG + if (t.Exception.GetType().ToString() == "System.AggregateException") + exception = t.Exception.InnerException!; +#endif + + App.FinalizeExceptionHandling(exception, false); + }); + + // this ordering is very important as all wpf windows are shown as modal dialogs, mess it up and you'll end up blocking input to one of them + dialog?.ShowBootstrapper(); + + if (!App.LaunchSettings.IsNoLaunch && App.Settings.Prop.EnableActivityTracking) + App.NotifyIcon?.InitializeContextMenu(); + + App.Logger.WriteLine(LOG_IDENT, "Waiting for bootstrapper task to finish"); + + bootstrapperTask.Wait(); + } + } +} diff --git a/Bloxstrap/LaunchSettings.cs b/Bloxstrap/LaunchSettings.cs index 07e3eee..54350f1 100644 --- a/Bloxstrap/LaunchSettings.cs +++ b/Bloxstrap/LaunchSettings.cs @@ -12,8 +12,11 @@ namespace Bloxstrap { public class LaunchSettings { - [LaunchFlag(new[] { "-preferences", "-menu" })] - public bool IsMenuLaunch { get; private set; } = false; + [LaunchFlag(new[] { "-preferences", "-menu", "-settings" })] + public bool IsMenuLaunch { get; set; } = false; + + [LaunchFlag("-player")] + public bool IsRobloxLaunch { get; set; } = false; [LaunchFlag("-quiet")] public bool IsQuiet { get; private set; } = false; diff --git a/Bloxstrap/Logger.cs b/Bloxstrap/Logger.cs index 344d55a..2eea25d 100644 --- a/Bloxstrap/Logger.cs +++ b/Bloxstrap/Logger.cs @@ -16,6 +16,7 @@ { const string LOG_IDENT = "Logger::Initialize"; + // TODO: /Bloxstrap/Logs/ string directory = useTempDir ? Path.Combine(Paths.LocalAppData, "Temp") : Path.Combine(Paths.Base, "Logs"); string timestamp = DateTime.UtcNow.ToString("yyyyMMdd'T'HHmmss'Z'"); string filename = $"{App.ProjectName}_{timestamp}.log"; diff --git a/Bloxstrap/Paths.cs b/Bloxstrap/Paths.cs index ecdc71c..cd04cc8 100644 --- a/Bloxstrap/Paths.cs +++ b/Bloxstrap/Paths.cs @@ -7,7 +7,7 @@ public static string UserProfile => Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); public static string LocalAppData => Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); public static string Desktop => Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); - public static string StartMenu => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Programs", App.ProjectName); + public static string WindowsStartMenu => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Programs"); public static string System => Environment.GetFolderPath(Environment.SpecialFolder.System); public static string Process => Environment.ProcessPath!; @@ -35,8 +35,6 @@ Modifications = Path.Combine(Base, "Modifications"); Application = Path.Combine(Base, $"{App.ProjectName}.exe"); - - } } } diff --git a/Bloxstrap/ProtocolHandler.cs b/Bloxstrap/ProtocolHandler.cs index eb24592..6338c77 100644 --- a/Bloxstrap/ProtocolHandler.cs +++ b/Bloxstrap/ProtocolHandler.cs @@ -73,9 +73,9 @@ namespace Bloxstrap { string handlerArgs = $"\"{handler}\" %1"; - using RegistryKey uriKey = Registry.CurrentUser.CreateSubKey($@"Software\Classes\{key}"); - using RegistryKey uriIconKey = uriKey.CreateSubKey("DefaultIcon"); - using RegistryKey uriCommandKey = uriKey.CreateSubKey(@"shell\open\command"); + using var uriKey = Registry.CurrentUser.CreateSubKey($@"Software\Classes\{key}"); + using var uriIconKey = uriKey.CreateSubKey("DefaultIcon"); + using var uriCommandKey = uriKey.CreateSubKey(@"shell\open\command"); if (uriKey.GetValue("") is null) { diff --git a/Bloxstrap/Resources/Menu/StartMenu.png b/Bloxstrap/Resources/Menu/StartMenu.png deleted file mode 100644 index 7a54f04df5f861b5b873c6f523d6a68f938f4dd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256554 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

q8uqb+%L; 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�GeQgd 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�yerz%BSm=QaG>VRc~|`794kT?t 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˹!g4WNuX93OGj?+SSSEvu%qfVo{Zk#w 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 YUq_|CzUElkzW@LL07*qoM6N<$f + /// Looks up a localized string similar to You currently do not have the WebView2 runtime installed. Some Roblox features will not work properly without it, such as the desktop app. Would you like to download it now?. + /// + public static string Bootstrapper_WebView2NotFound { + get { + return ResourceManager.GetString("Bootstrapper.WebView2NotFound", resourceCulture); + } + } + ///

/// Looks up a localized string similar to Roblox requires the use of Windows Media Foundation components. You appear to be missing them, likely because you are using an N edition of Windows. Please install them first, and then launch Roblox.. /// @@ -440,6 +449,24 @@ namespace Bloxstrap.Resources { } } + /// + /// Looks up a localized string similar to Back. + /// + public static string Common_Navigation_Back { + get { + return ResourceManager.GetString("Common.Navigation.Back", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Next. + /// + public static string Common_Navigation_Next { + get { + return ResourceManager.GetString("Common.Navigation.Next", resourceCulture); + } + } + /// /// Looks up a localized string similar to New. /// @@ -657,6 +684,15 @@ namespace Bloxstrap.Resources { } } + /// + /// Looks up a localized string similar to Bloxstrap was unable to create shortcuts for the Desktop and Start menu. Try creating them later through Bloxstrap Settings.. + /// + public static string Dialog_CannotCreateShortcuts { + get { + return ResourceManager.GetString("Dialog.CannotCreateShortcuts", resourceCulture); + } + } + /// /// Looks up a localized string similar to More information:. /// @@ -1139,6 +1175,223 @@ namespace Bloxstrap.Resources { } } + /// + /// Looks up a localized string similar to Will drop you into the desktop app once everything's done. + /// + public static string Installer_Completion_Launch_Description { + get { + return ResourceManager.GetString("Installer.Completion.Launch.Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Install and launch Roblox. + /// + public static string Installer_Completion_Launch_Title { + get { + return ResourceManager.GetString("Installer.Completion.Launch.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tweak with all the features it has to offer. + /// + public static string Installer_Completion_Settings_Description { + get { + return ResourceManager.GetString("Installer.Completion.Settings.Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Configure Bloxstrap's settings. + /// + public static string Installer_Completion_Settings_Title { + get { + return ResourceManager.GetString("Installer.Completion.Settings.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bloxstrap has successfully been installed. + /// + ///Roblox has not yet been installed, that will happen when you launch it with Bloxstrap for the first time. However, before you do that, you may want to configure Bloxstrap's settings first. + /// + ///Also, to keep Bloxstrap registered as the website launch handler, avoid using the "Roblox Player" shortcut to launch Roblox. If you don't see Bloxstrap show when launching from the website, simply launch Roblox with Bloxstrap once from the desktop to fix it. + /// + ///What would y [rest of string was truncated]";. + /// + public static string Installer_Completion_Text { + get { + return ResourceManager.GetString("Installer.Completion.Text", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Completion. + /// + public static string Installer_Completion_Title { + get { + return ResourceManager.GetString("Installer.Completion.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Existing data found. Your mods and settings will be restored.. + /// + public static string Installer_Install_Location_DataFound { + get { + return ResourceManager.GetString("Installer.Install.Location.DataFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Roblox will also be installed to this path. Change this if you prefer to install all your games to a separate drive. Otherwise, it's recommended that you keep this as it is.. + /// + public static string Installer_Install_Location_Text { + get { + return ResourceManager.GetString("Installer.Install.Location.Text", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Choose where to install to. + /// + public static string Installer_Install_Location_Title { + get { + return ResourceManager.GetString("Installer.Install.Location.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Create Desktop shortcuts. + /// + public static string Installer_Install_Shortcuts_Desktop { + get { + return ResourceManager.GetString("Installer.Install.Shortcuts.Desktop", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Create Start Menu shortcuts. + /// + public static string Installer_Install_Shortcuts_StartMenu { + get { + return ResourceManager.GetString("Installer.Install.Shortcuts.StartMenu", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Shortcuts. + /// + public static string Installer_Install_Shortcuts_Title { + get { + return ResourceManager.GetString("Installer.Install.Shortcuts.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Install. + /// + public static string Installer_Install_Title { + get { + return ResourceManager.GetString("Installer.Install.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bloxstrap Installer. + /// + public static string Installer_Title { + get { + return ResourceManager.GetString("Installer.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Thank you for downloading Bloxstrap. + /// + ///You should have gotten it from either {0} or {1}. Those are the only official websites to get it from. + /// + ///This installation process will be quick and simple, and you will be able to configure any of Bloxstrap's settings after installation.. + /// + public static string Installer_Welcome_MainText { + get { + return ResourceManager.GetString("Installer.Welcome.MainText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Please click 'Next' to continue.. + /// + public static string Installer_Welcome_NextToContinue { + get { + return ResourceManager.GetString("Installer.Welcome.NextToContinue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Welcome. + /// + public static string Installer_Welcome_Title { + get { + return ResourceManager.GetString("Installer.Welcome.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You are trying to install version {0} of Bloxstrap, but the latest version available is {1}. Would you like to download it?. + /// + public static string Installer_Welcome_UpdateNotice { + get { + return ResourceManager.GetString("Installer.Welcome.UpdateNotice", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Configure settings. + /// + public static string LaunchMenu_ConfigureSettings { + get { + return ResourceManager.GetString("LaunchMenu.ConfigureSettings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Launch Roblox. + /// + public static string LaunchMenu_LaunchRoblox { + get { + return ResourceManager.GetString("LaunchMenu.LaunchRoblox", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to What do you want to do?. + /// + public static string LaunchMenu_Title { + get { + return ResourceManager.GetString("LaunchMenu.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to See the Wiki for help. + /// + public static string LaunchMenu_Wiki_Description { + get { + return ResourceManager.GetString("LaunchMenu.Wiki.Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Having an issue?. + /// + public static string LaunchMenu_Wiki_Title { + get { + return ResourceManager.GetString("LaunchMenu.Wiki.Title", resourceCulture); + } + } + /// /// Looks up a localized string similar to No log file will be written for this launch because Bloxstrap is unable to write to the folder at '{0}'. /// @@ -2103,87 +2356,6 @@ namespace Bloxstrap.Resources { } } - /// - /// Looks up a localized string similar to Install. - /// - public static string Menu_Install { - get { - return ResourceManager.GetString("Menu.Install", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Configure how Bloxstrap/Roblox is installed.. - /// - public static string Menu_Installation_Description { - get { - return ResourceManager.GetString("Menu.Installation.Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Choose where Bloxstrap should be installed to.. - /// - public static string Menu_Installation_InstallLocation_Description { - get { - return ResourceManager.GetString("Menu.Installation.InstallLocation.Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Install Location. - /// - public static string Menu_Installation_InstallLocation_Title { - get { - return ResourceManager.GetString("Menu.Installation.InstallLocation.Title", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Where Bloxstrap is currently installed to.. - /// - public static string Menu_Installation_OpenInstallFolder_Description { - get { - return ResourceManager.GetString("Menu.Installation.OpenInstallFolder.Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Open Installation Folder. - /// - public static string Menu_Installation_OpenInstallFolder_Title { - get { - return ResourceManager.GetString("Menu.Installation.OpenInstallFolder.Title", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Installation. - /// - public static string Menu_Installation_Title { - get { - return ResourceManager.GetString("Menu.Installation.Title", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Here's a guide on how to uninstall Bloxstrap.. - /// - public static string Menu_Installation_UninstallGuide_Description { - get { - return ResourceManager.GetString("Menu.Installation.UninstallGuide.Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Looking to uninstall?. - /// - public static string Menu_Installation_UninstallGuide_Title { - get { - return ResourceManager.GetString("Menu.Installation.UninstallGuide.Title", resourceCulture); - } - } - /// /// Looks up a localized string similar to Bloxstrap cannot be installed here. Please choose a different location, or resort to using the default location by clicking the reset button.. /// @@ -2523,15 +2695,6 @@ namespace Bloxstrap.Resources { } } - /// - /// Looks up a localized string similar to Bloxstrap must first be installed.. - /// - public static string Menu_Mods_OpenModsFolder_MustBeInstalled { - get { - return ResourceManager.GetString("Menu.Mods.OpenModsFolder.MustBeInstalled", resourceCulture); - } - } - /// /// Looks up a localized string similar to Open Mods Folder. /// @@ -2649,42 +2812,6 @@ namespace Bloxstrap.Resources { } } - /// - /// Looks up a localized string similar to There's just a few things you first should know about.. - /// - public static string Menu_PreInstall_Description { - get { - return ResourceManager.GetString("Menu.PreInstall.Description", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to After installation has finished, the Bloxstrap Menu will be registered as an application in the Start menu. If you ever need to access it again to re-adjust your settings, or access resources such as Fast Flag management, you can find it there.. - /// - public static string Menu_PreInstall_Info_1 { - get { - return ResourceManager.GetString("Menu.PreInstall.Info.1", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to If you ever need help or guidance with anything, be sure to check the [Wiki]({0}). If you still need something, open an [issue]({1}) on GitHub, or join our [Discord server]({2}).. - /// - public static string Menu_PreInstall_Info_2 { - get { - return ResourceManager.GetString("Menu.PreInstall.Info.2", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Before you install.... - /// - public static string Menu_PreInstall_Title { - get { - return ResourceManager.GetString("Menu.PreInstall.Title", resourceCulture); - } - } - /// /// Looks up a localized string similar to Save. /// @@ -2713,12 +2840,63 @@ namespace Bloxstrap.Resources { } /// - /// Looks up a localized string similar to Bloxstrap Menu. + /// Looks up a localized string similar to Bloxstrap Settings. /// public static string Menu_Title { get { return ResourceManager.GetString("Menu.Title", resourceCulture); } } + + /// + /// Looks up a localized string similar to They'll be kept where Bloxstrap was installed, and will automatically be restored on a reinstall.. + /// + public static string Uninstaller_KeepData_Description { + get { + return ResourceManager.GetString("Uninstaller.KeepData.Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Keep my settings and mods. + /// + public static string Uninstaller_KeepData_Label { + get { + return ResourceManager.GetString("Uninstaller.KeepData.Label", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Uninstalling will remove Bloxstrap from your system, and automatically reconfigure the default Roblox launcher if it's still installed. + /// + ///If you're uninstalling or reinstalling because you are having issues with Roblox, read [this help page]({0}) first. + /// + ///The uninstall process may not be able to fully clean up itself, so you may need to manually clean up leftover files where Bloxstrap was installed. + /// + ///Bloxstrap was installed at "{1}".. + /// + public static string Uninstaller_Text { + get { + return ResourceManager.GetString("Uninstaller.Text", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Uninstall Bloxstrap. + /// + public static string Uninstaller_Title { + get { + return ResourceManager.GetString("Uninstaller.Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Uninstall. + /// + public static string Uninstaller_Uninstall { + get { + return ResourceManager.GetString("Uninstaller.Uninstall", resourceCulture); + } + } } } diff --git a/Bloxstrap/Resources/Strings.resx b/Bloxstrap/Resources/Strings.resx index fa1bdb3..5704db3 100644 --- a/Bloxstrap/Resources/Strings.resx +++ b/Bloxstrap/Resources/Strings.resx @@ -707,33 +707,6 @@ Do NOT use this to import large "flag lists" made by other people that promise t Icon files - - Install - - - Configure how Bloxstrap/Roblox is installed. - - - Choose where Bloxstrap should be installed to. - - - Install Location - - - Where Bloxstrap is currently installed to. - - - Open Installation Folder - - - Installation - - - Here's a guide on how to uninstall Bloxstrap. - - - Looking to uninstall? - Bloxstrap cannot be installed here. Please choose a different location, or resort to using the default location by clicking the reset button. @@ -852,9 +825,6 @@ Selecting 'No' will ignore this warning and continue installation. Manage custom Roblox mods here. - - Bloxstrap must first be installed. - Open Mods Folder @@ -894,18 +864,6 @@ Selecting 'No' will ignore this warning and continue installation. Click for more information on this option. - - There's just a few things you first should know about. - - - After installation has finished, the Bloxstrap Menu will be registered as an application in the Start menu. If you ever need to access it again to re-adjust your settings, or access resources such as Fast Flag management, you can find it there. - - - If you ever need help or guidance with anything, be sure to check the [Wiki]({0}). If you still need something, open an [issue]({1}) on GitHub, or join our [Discord server]({2}). - - - Before you install... - Save @@ -916,7 +874,7 @@ Selecting 'No' will ignore this warning and continue installation. Settings saved! - Bloxstrap Menu + Bloxstrap Settings Choose preferred language @@ -1027,4 +985,116 @@ Selecting 'No' will ignore this warning and continue installation. Roblox is still launching. A log file will only be available once Roblox launches. + + Bloxstrap Installer + + + Welcome + + + Install + + + Completion + + + Back + + + Next + + + Thank you for downloading Bloxstrap. + +You should have gotten it from either {0} or {1}. Those are the only official websites to get it from. + +This installation process will be quick and simple, and you will be able to configure any of Bloxstrap's settings after installation. + + + Please click 'Next' to continue. + + + You are trying to install version {0} of Bloxstrap, but the latest version available is {1}. Would you like to download it? + + + Choose where to install to + + + Roblox will also be installed to this path. Change this if you prefer to install all your games to a separate drive. Otherwise, it's recommended that you keep this as it is. + + + Existing data found. Your mods and settings will be restored. + + + Shortcuts + + + Create Desktop shortcuts + + + Create Start Menu shortcuts + + + Bloxstrap has successfully been installed. + +Roblox has not yet been installed, that will happen when you launch it with Bloxstrap for the first time. However, before you do that, you may want to configure Bloxstrap's settings first. + +Also, to keep Bloxstrap registered as the website launch handler, avoid using the "Roblox Player" shortcut to launch Roblox. If you don't see Bloxstrap show when launching from the website, simply launch Roblox with Bloxstrap once from the desktop to fix it. + +What would you like to do? + + + Configure Bloxstrap's settings + + + Tweak with all the features it has to offer + + + Install and launch Roblox + + + Will drop you into the desktop app once everything's done + + + Uninstall Bloxstrap + + + Uninstalling will remove Bloxstrap from your system, and automatically reconfigure the default Roblox launcher if it's still installed. + +If you're uninstalling or reinstalling because you are having issues with Roblox, read [this help page]({0}) first. + +The uninstall process may not be able to fully clean up itself, so you may need to manually clean up leftover files where Bloxstrap was installed. + +Bloxstrap was installed at "{1}". + + + Keep my settings and mods + + + They'll be kept where Bloxstrap was installed, and will automatically be restored on a reinstall. + + + Uninstall + + + What do you want to do? + + + Launch Roblox + + + Configure settings + + + Having an issue? + + + See the Wiki for help + + + You currently do not have the WebView2 runtime installed. Some Roblox features will not work properly without it, such as the desktop app. Would you like to download it now? + + + Bloxstrap was unable to create shortcuts for the Desktop and Start menu. Try creating them later through Bloxstrap Settings. + \ No newline at end of file diff --git a/Bloxstrap/RobloxDeployment.cs b/Bloxstrap/RobloxDeployment.cs index 7f00336..6c97d4e 100644 --- a/Bloxstrap/RobloxDeployment.cs +++ b/Bloxstrap/RobloxDeployment.cs @@ -1,5 +1,6 @@ namespace Bloxstrap { + // TODO: this is a mess and desperately needs refactoring public static class RobloxDeployment { public const string DefaultChannel = "LIVE"; @@ -52,7 +53,7 @@ // this function serves double duty as the setup mirror enumerator, and as our connectivity check // since we're basically asking four different urls for the exact same thing, if all four fail, then it has to be a user-side problem - // this should be checked for in the installer, in the menu, and in the bootstrapper, as each of those have a dedicated spot they show in + // this should be checked for in the installer and in the bootstrapper // returns null for success @@ -168,7 +169,7 @@ { var defaultClientVersion = await GetInfo(DefaultChannel); - if (Utilities.CompareVersions(clientVersion.Version, defaultClientVersion.Version) == -1) + if (Utilities.CompareVersions(clientVersion.Version, defaultClientVersion.Version) == VersionComparison.LessThan) clientVersion.IsBehindDefaultChannel = true; } diff --git a/Bloxstrap/UI/Elements/Dialogs/LanguageSelectorDialog.xaml b/Bloxstrap/UI/Elements/Dialogs/LanguageSelectorDialog.xaml index 5794e85..ab9d48e 100644 --- a/Bloxstrap/UI/Elements/Dialogs/LanguageSelectorDialog.xaml +++ b/Bloxstrap/UI/Elements/Dialogs/LanguageSelectorDialog.xaml @@ -8,7 +8,7 @@ xmlns:base="clr-namespace:Bloxstrap.UI.Elements.Base" xmlns:resources="clr-namespace:Bloxstrap.Resources" mc:Ignorable="d" - Title="Bloxstrap" + Title="{x:Static resources:Strings.Installer_Title}" MinWidth="0" MinHeight="0" Width="380" @@ -24,10 +24,10 @@ - + - + diff --git a/Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml b/Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml new file mode 100644 index 0000000..446b34c --- /dev/null +++ b/Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml.cs b/Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml.cs new file mode 100644 index 0000000..f51898f --- /dev/null +++ b/Bloxstrap/UI/Elements/Dialogs/LaunchMenuDialog.xaml.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; +using Bloxstrap.UI.ViewModels.Dialogs; +using Bloxstrap.UI.ViewModels.Installer; +using Wpf.Ui.Mvvm.Interfaces; + +namespace Bloxstrap.UI.Elements.Dialogs +{ + /// + /// Interaction logic for LaunchMenuDialog.xaml + /// + public partial class LaunchMenuDialog + { + public NextAction CloseAction = NextAction.Terminate; + + public LaunchMenuDialog() + { + var viewModel = new LaunchMenuViewModel(); + viewModel.CloseWindowRequest += (_, closeAction) => + { + CloseAction = closeAction; + Close(); + }; + + DataContext = viewModel; + + InitializeComponent(); + ApplyTheme(); + } + } +} diff --git a/Bloxstrap/UI/Elements/Dialogs/UninstallerDialog.xaml b/Bloxstrap/UI/Elements/Dialogs/UninstallerDialog.xaml new file mode 100644 index 0000000..4bc1546 --- /dev/null +++ b/Bloxstrap/UI/Elements/Dialogs/UninstallerDialog.xaml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + +