From 4293db93e93973e9bb1826128353434da28268a2 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Mon, 3 Nov 2025 19:14:49 +0200 Subject: [PATCH 1/4] Commit upgrade plan --- .github/upgrades/dotnet-upgrade-plan.md | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/upgrades/dotnet-upgrade-plan.md diff --git a/.github/upgrades/dotnet-upgrade-plan.md b/.github/upgrades/dotnet-upgrade-plan.md new file mode 100644 index 0000000..93658cc --- /dev/null +++ b/.github/upgrades/dotnet-upgrade-plan.md @@ -0,0 +1,34 @@ +# .NET 8.0 Upgrade Plan + +## Execution Steps + +Execute steps below sequentially one by one in the order they are listed. + +1. Validate that a .NET 8.0 SDK required for this upgrade is installed on the machine and if not, help to get it installed. +2. Ensure that the SDK version specified in global.json files is compatible with the .NET 8.0 upgrade. +3. Upgrade UnityLauncherPro\UnityLauncherPro.csproj + +## Settings + +This section contains settings and data used by execution steps. + +### Excluded projects + +No projects are excluded from the upgrade. + +### Project upgrade details + +This section contains details about each project upgrade and modifications that need to be done in the project. + +#### UnityLauncherPro\UnityLauncherPro.csproj modifications + +Project format changes: + - Project file needs to be converted to SDK-style format + +Project properties changes: + - Target framework should be changed from `net48` to `net8.0-windows` + +Other changes: + - WPF project properties need to be configured for .NET 8.0 (UseWPF=true) + - Assembly information may need to be migrated from AssemblyInfo.cs to project properties + - Project references and file includes will be automatically inferred by SDK-style format \ No newline at end of file From 38af7b94024be3f7547c7b0550a5c06544d9d9c9 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Mon, 3 Nov 2025 19:15:44 +0200 Subject: [PATCH 2/4] Migrate project to SDK-style and remove AssemblyInfo.cs Converted UnityLauncherPro to use the modern SDK-style .csproj format targeting net8.0-windows, enabling both WPF and Windows Forms support. The legacy AssemblyInfo.cs file was deleted, with assembly metadata now managed by the SDK project system. Unnecessary legacy references and configuration blocks were removed, simplifying the project structure. PreBuild and PostBuild PowerShell targets for version stamping remain. --- UnityLauncherPro/Properties/AssemblyInfo.cs | 55 ------- UnityLauncherPro/UnityLauncherPro.csproj | 166 +------------------- 2 files changed, 5 insertions(+), 216 deletions(-) delete mode 100644 UnityLauncherPro/Properties/AssemblyInfo.cs diff --git a/UnityLauncherPro/Properties/AssemblyInfo.cs b/UnityLauncherPro/Properties/AssemblyInfo.cs deleted file mode 100644 index 6fe6e89..0000000 --- a/UnityLauncherPro/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Reflection; -using System.Resources; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Windows; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UnityLauncherPro")] -[assembly: AssemblyDescription("Unity Hub Alternative")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("UnityCoder.com")] -[assembly: AssemblyProduct("UnityLauncherPro")] -[assembly: AssemblyCopyright("Copyright © 2025")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -//In order to begin building localizable applications, set -//CultureYouAreCodingWith in your .csproj file -//inside a . For example, if you are using US english -//in your source files, set the to en-US. Then uncomment -//the NeutralResourceLanguage attribute below. Update the "en-US" in -//the line below to match the UICulture setting in the project file. - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] - - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.1")] -[assembly: AssemblyFileVersion("1.0.0.1")] diff --git a/UnityLauncherPro/UnityLauncherPro.csproj b/UnityLauncherPro/UnityLauncherPro.csproj index 5fe024b..6c8e0da 100644 --- a/UnityLauncherPro/UnityLauncherPro.csproj +++ b/UnityLauncherPro/UnityLauncherPro.csproj @@ -1,19 +1,7 @@ - - - + - Debug - AnyCPU - {EC78D91A-3E63-4CAA-8BC3-9673A30FDA45} + net8.0-windows WinExe - UnityLauncherPro - UnityLauncherPro - v4.8 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - true - true publish\ true Disk @@ -29,157 +17,16 @@ false false true - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - + true + true + true Images/icon.ico - - - app.manifest - - - - - - - - - - - - 4.0 - - - - - - - - MSBuild:Compile - Designer - - - - - - - - - - - - - - - DownloadProgressWindow.xaml - - - - - - - - - NewProject.xaml - - - ProjectProperties.xaml - - - ThemeEditor.xaml - - - - - UpgradeWindow.xaml - - - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - App.xaml - Code - - - MainWindow.xaml - Code - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - - - Code - - - True - True - Resources.resx - - - True - Settings.settings - True - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - @@ -202,12 +49,9 @@ - - - From e75f68e7f16464f83f2cd0e3025543a014c7475b Mon Sep 17 00:00:00 2001 From: unitycoder Date: Mon, 3 Nov 2025 19:15:55 +0200 Subject: [PATCH 3/4] Update UnityLauncherPro.csproj references and add NuGet package Removed direct assembly references to System.Configuration, Microsoft.CSharp, and System.Data.DataSetExtensions from UnityLauncherPro.csproj. Added a NuGet package reference to System.Configuration.ConfigurationManager (version 9.0.10) instead, streamlining dependency management. No other changes were made to the project file. --- UnityLauncherPro/UnityLauncherPro.csproj | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/UnityLauncherPro/UnityLauncherPro.csproj b/UnityLauncherPro/UnityLauncherPro.csproj index 6c8e0da..aedb110 100644 --- a/UnityLauncherPro/UnityLauncherPro.csproj +++ b/UnityLauncherPro/UnityLauncherPro.csproj @@ -23,11 +23,6 @@ Images/icon.ico app.manifest - - - - - False @@ -55,4 +50,7 @@ + + + \ No newline at end of file From 91bf0238fc3e3592b54c10afe2f7d7abe9531072 Mon Sep 17 00:00:00 2001 From: unitycoder Date: Mon, 3 Nov 2025 20:10:34 +0200 Subject: [PATCH 4/4] 8.0 upgrade test, fails on loading settings data? --- UnityLauncherPro/App.config | 280 +++++++++--------- UnityLauncherPro/GetProjects.cs | 4 + UnityLauncherPro/GetUnityInstallations.cs | 8 +- UnityLauncherPro/MainWindow.xaml.cs | 193 ++++++++---- .../Properties/Settings.Designer.cs | 12 + UnityLauncherPro/Properties/Settings.settings | 3 + UnityLauncherPro/UnityLauncherPro.csproj | 18 +- 7 files changed, 329 insertions(+), 189 deletions(-) diff --git a/UnityLauncherPro/App.config b/UnityLauncherPro/App.config index 7df03f7..c21b1a0 100644 --- a/UnityLauncherPro/App.config +++ b/UnityLauncherPro/App.config @@ -1,141 +1,151 @@  + + + +
+ + + + - - -
- - - - - - - - - 600 - - - 650 - - - True - - - False - - - False - - - True - - - False - - - False - - - False - - - False - - - - - - - - - True - - - False - - - False - - - False - - - - - - False - - - theme.ini - - - False - - - False - - - False - - - dd/MM/yyyy HH:mm:ss - - - False - - - False - - - -s Unity ActivityManager PackageManager dalvikvm DEBUG -v color - - - 0 - - - - - - - - - False - - - False - - - - - - - - C:\Program Files\ - - - - - InitializeProject.cs - - - False - - - 50000 - - - - - - - - False - - - 40 - - - + + + + + 600 + + + 650 + + + True + + + False + + + False + + + True + + + False + + + False + + + False + + + False + + + + + + + + + True + + + False + + + False + + + False + + + + + + False + + + theme.ini + + + False + + + False + + + False + + + dd/MM/yyyy HH:mm:ss + + + False + + + False + + + -s Unity ActivityManager PackageManager dalvikvm DEBUG -v color + + + 0 + + + + + + + + + False + + + False + + + + + + + + + + C:\Program Files\ + + + + + + InitializeProject.cs + + + False + + + 50000 + + + + + + + + False + + + 40 + + + diff --git a/UnityLauncherPro/GetProjects.cs b/UnityLauncherPro/GetProjects.cs index bb3ae29..6cbaa52 100644 --- a/UnityLauncherPro/GetProjects.cs +++ b/UnityLauncherPro/GetProjects.cs @@ -17,6 +17,10 @@ public static class GetProjects public static List Scan(bool getGitBranch = false, bool getPlasticBranch = false, bool getArguments = false, bool showMissingFolders = false, bool showTargetPlatform = false, StringCollection AllProjectPaths = null, bool searchGitbranchRecursively = false, bool showSRP = false) { + // TODO FIXME + Console.WriteLine("TODO fixme 8.0"); + return null; + List projectsFound = new List(); var hklm = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); diff --git a/UnityLauncherPro/GetUnityInstallations.cs b/UnityLauncherPro/GetUnityInstallations.cs index 7f4570d..a7090cd 100644 --- a/UnityLauncherPro/GetUnityInstallations.cs +++ b/UnityLauncherPro/GetUnityInstallations.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; namespace UnityLauncherPro @@ -14,8 +15,13 @@ public static class GetUnityInstallations // returns unity installations public static List Scan() { + // TODO fixme 8.0 + Console.WriteLine("TODO fixme 8.0"); + return null; + + // get list from settings - var rootFolders = Properties.Settings.Default.rootFolders; + StringCollection rootFolders = Properties.Settings.Default.rootFolders; // unityversion, exe_path List results = new List(); diff --git a/UnityLauncherPro/MainWindow.xaml.cs b/UnityLauncherPro/MainWindow.xaml.cs index e965383..7d18842 100644 --- a/UnityLauncherPro/MainWindow.xaml.cs +++ b/UnityLauncherPro/MainWindow.xaml.cs @@ -152,7 +152,9 @@ void Start() //Properties.Settings.Default.projectPaths = null; //Properties.Settings.Default.Save(); - projectsSource = GetProjects.Scan(getGitBranch: (bool)chkShowGitBranchColumn.IsChecked, getPlasticBranch: (bool)chkCheckPlasticBranch.IsChecked, getArguments: (bool)chkShowLauncherArgumentsColumn.IsChecked, showMissingFolders: (bool)chkShowMissingFolderProjects.IsChecked, showTargetPlatform: (bool)chkShowPlatform.IsChecked, AllProjectPaths: Properties.Settings.Default.projectPaths, searchGitbranchRecursively: (bool)chkGetGitBranchRecursively.IsChecked, showSRP: (bool)chkCheckSRP.IsChecked); + // TODO fixme 8.0 + Console.WriteLine("TODO fixme 8.0"); + //projectsSource = GetProjects.Scan(getGitBranch: (bool)chkShowGitBranchColumn.IsChecked, getPlasticBranch: (bool)chkCheckPlasticBranch.IsChecked, getArguments: (bool)chkShowLauncherArgumentsColumn.IsChecked, showMissingFolders: (bool)chkShowMissingFolderProjects.IsChecked, showTargetPlatform: (bool)chkShowPlatform.IsChecked, AllProjectPaths: Properties.Settings.Default.projectPaths, searchGitbranchRecursively: (bool)chkGetGitBranchRecursively.IsChecked, showSRP: (bool)chkCheckSRP.IsChecked); //Console.WriteLine("projectsSource.Count: " + projectsSource.Count); @@ -531,15 +533,46 @@ private bool BuildReportFilter(object item) return (reportItem.Path.IndexOf(_filterString, 0, StringComparison.CurrentCultureIgnoreCase) != -1); } + void UpgradeOnceIfNeeded() + { + if (!Settings.Default.__UpgradedOnce) + { + try { Settings.Default.Upgrade(); } catch { /* ignore */ } + Settings.Default.__UpgradedOnce = true; + Settings.Default.Save(); + } + } + + void RepairProblematicSettings() + { + // Ensure XML-serializable defaults for complex types + try { var _ = Settings.Default.rootFolders; } + catch { Settings.Default.rootFolders = new System.Collections.Specialized.StringCollection(); } + + try { var _ = Settings.Default.gridColumnWidths; } + catch { Settings.Default.gridColumnWidths = Array.Empty(); } + + try { var _ = Settings.Default.gridColumnWidthsBuildReport; } + catch { Settings.Default.gridColumnWidthsBuildReport = Array.Empty(); } + + try { var _ = Settings.Default.recentColumnsOrder; } + catch { Settings.Default.recentColumnsOrder = Array.Empty(); } + + Settings.Default.Save(); + } + + void LoadSettings() { - // debug, print filename - //Console.WriteLine(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath); + UpgradeOnceIfNeeded(); + RepairProblematicSettings(); + Settings.Default.Reload(); - // catch corrupted config file try { + // For .NET 8: Reload is still needed to get latest values from user.config Settings.Default.Reload(); + // form size this.Width = Settings.Default.windowWidth; this.Height = Settings.Default.windowHeight; @@ -553,7 +586,7 @@ void LoadSettings() chkQuitAfterOpen.IsChecked = Settings.Default.closeAfterProject; chkShowLauncherArgumentsColumn.IsChecked = Settings.Default.showArgumentsColumn; chkShowGitBranchColumn.IsChecked = Settings.Default.showGitBranchColumn; - chkGetGitBranchRecursively.IsChecked = Settings.Default.searchGitFolderRecursivly; // FIXME typo + chkGetGitBranchRecursively.IsChecked = Settings.Default.searchGitFolderRecursivly; chkCheckPlasticBranch.IsChecked = Settings.Default.checkPlasticBranch; chkShowMissingFolderProjects.IsChecked = Settings.Default.showProjectsMissingFolder; chkAllowSingleInstanceOnly.IsChecked = Settings.Default.AllowSingleInstanceOnly; @@ -584,9 +617,15 @@ void LoadSettings() // update installations folder listbox lstRootFolders.Items.Clear(); - // check if no installation root folders are added, then add default folder(s), this usually happens only on first run (or if user has not added any folders) - if (Settings.Default.rootFolders.Count == 0) + // check if no installation root folders are added, then add default folder(s) + if (Settings.Default.rootFolders == null || Settings.Default.rootFolders.Count == 0) { + // Initialize the collection if null + if (Settings.Default.rootFolders == null) + { + Settings.Default.rootFolders = new System.Collections.Specialized.StringCollection(); + } + // default hub installation folder string baseFolder = "\\Program Files\\Unity\\Hub\\Editor"; string baseFolder2 = "\\Program Files\\"; @@ -594,47 +633,48 @@ void LoadSettings() string defaultFolder2 = "D:" + baseFolder; string defaultFolder3 = "C:" + baseFolder2; string defaultFolder4 = "D:" + baseFolder2; + if (Directory.Exists(defaultFolder1)) { - Properties.Settings.Default.rootFolders.Add(defaultFolder1); + Settings.Default.rootFolders.Add(defaultFolder1); } else if (Directory.Exists(defaultFolder2)) { - Properties.Settings.Default.rootFolders.Add(defaultFolder2); + Settings.Default.rootFolders.Add(defaultFolder2); } else if (Directory.Exists(defaultFolder3)) { if (GetUnityInstallations.HasUnityInstallations(defaultFolder3)) { - Properties.Settings.Default.rootFolders.Add(defaultFolder3); + Settings.Default.rootFolders.Add(defaultFolder3); } else if (GetUnityInstallations.HasUnityInstallations(defaultFolder4)) { - Properties.Settings.Default.rootFolders.Add(defaultFolder4); + Settings.Default.rootFolders.Add(defaultFolder4); } } } - lstRootFolders.ItemsSource = Properties.Settings.Default.rootFolders; + lstRootFolders.ItemsSource = Settings.Default.rootFolders; // restore recent project datagrid column widths - int[] gridColumnWidths = Properties.Settings.Default.gridColumnWidths; + int[] gridColumnWidths = Settings.Default.gridColumnWidths; if (gridColumnWidths != null) { for (int i = 0; i < gridColumnWidths.Length; ++i) { - if (i >= gridRecent.Columns.Count) break; // too many columns were saved, probably some test columns + if (i >= gridRecent.Columns.Count) break; gridRecent.Columns[i].Width = gridColumnWidths[i]; } } // restore buildreport datagrid column widths - gridColumnWidths = Properties.Settings.Default.gridColumnWidthsBuildReport; + gridColumnWidths = Settings.Default.gridColumnWidthsBuildReport; if (gridColumnWidths != null) { for (int i = 0; i < gridColumnWidths.Length; ++i) { - if (i >= gridBuildReport.Columns.Count) break; // too many columns were saved, probably some test columns + if (i >= gridBuildReport.Columns.Count) break; gridBuildReport.Columns[i].Width = gridColumnWidths[i]; } } @@ -650,13 +690,12 @@ void LoadSettings() { currentDateFormat = Settings.Default.customDateFormat; } - else // use default + else { currentDateFormat = defaultDateFormat; } chkHumanFriendlyDateTime.IsChecked = Settings.Default.useHumandFriendlyLastModified; - // if both enabled, then disable custom if (chkHumanFriendlyDateTime.IsChecked == true && chkUseCustomLastModified.IsChecked == true) { chkUseCustomLastModified.IsChecked = false; @@ -669,8 +708,6 @@ void LoadSettings() // recent grid column display index order var order = Settings.Default.recentColumnsOrder; - // if we dont have any values, get & set them now - // also, if user has disabled optional columns, saved order must be reset to default if (order == null || gridRecent.Columns.Count != Settings.Default.recentColumnsOrder.Length) { Settings.Default.recentColumnsOrder = new Int32[gridRecent.Columns.Count]; @@ -680,7 +717,7 @@ void LoadSettings() } Settings.Default.Save(); } - else // load existing order + else { for (int i = 0; i < gridRecent.Columns.Count; i++) { @@ -708,58 +745,104 @@ void LoadSettings() break; } - // set default .bat folder location to appdata/.., if nothing is set, or current one is invalid - if (string.IsNullOrEmpty(txtShortcutBatchFileFolder.Text) || Directory.Exists(txtShortcutBatchFileFolder.Text) == false) + // set default .bat folder location + if (string.IsNullOrEmpty(Settings.Default.shortcutBatchFileFolder) || + !Directory.Exists(Settings.Default.shortcutBatchFileFolder)) { - Settings.Default.shortcutBatchFileFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), appName); - txtShortcutBatchFileFolder.Text = Settings.Default.shortcutBatchFileFolder; + Settings.Default.shortcutBatchFileFolder = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), appName); + Settings.Default.Save(); } + txtShortcutBatchFileFolder.Text = Settings.Default.shortcutBatchFileFolder; chkUseInitScript.IsChecked = Settings.Default.useInitScript; txtCustomInitFileURL.Text = Settings.Default.customInitFileURL; // load webgl port - txtWebglPort.Text = "" + Settings.Default.webglPort; + txtWebglPort.Text = Settings.Default.webglPort.ToString(); webglPort = Settings.Default.webglPort; txtMaxProjectCount.Text = Settings.Default.maxProjectCount.ToString(); chkOverride40ProjectCount.IsChecked = Settings.Default.override40ProjectCount; - if ((bool)chkOverride40ProjectCount.IsChecked) - { - maxProjectCount = Settings.Default.maxProjectCount; - } - else - { - maxProjectCount = 40; - } + maxProjectCount = (bool)chkOverride40ProjectCount.IsChecked + ? Settings.Default.maxProjectCount + : 40; } catch (ConfigurationErrorsException ex) { - string filename = ((ConfigurationErrorsException)ex.InnerException).Filename; + Console.WriteLine($"Configuration error: {ex.Message}"); - if (MessageBox.Show("This may be due to a Windows crash/BSOD.\n" + - "Click 'Yes' to use automatic backup (if exists, otherwise settings are reset), then start application again.\n\n" + - "Click 'No' to exit now (and delete user.config manually)\n\nCorrupted file: " + filename, - appName + " - Corrupt user settings", - MessageBoxButton.YesNo, - MessageBoxImage.Error) == MessageBoxResult.Yes) - { + // Try to get the corrupted file path + string filename = ex.InnerException is ConfigurationErrorsException innerEx + ? innerEx.Filename + : null; - // try to use backup - string backupFilename = filename + ".bak"; - if (File.Exists(backupFilename)) + if (!string.IsNullOrEmpty(filename)) + { + var result = MessageBox.Show( + "Settings file is corrupted or incompatible with .NET 8.\n\n" + + "Click 'Yes' to reset settings to defaults.\n" + + "Click 'No' to exit and fix manually.\n\n" + + $"Corrupted file: {filename}", + $"{appName} - Configuration Error", + MessageBoxButton.YesNo, + MessageBoxImage.Error); + + if (result == MessageBoxResult.Yes) { - File.Copy(backupFilename, filename, true); + try + { + // Try to delete the corrupted user.config + if (File.Exists(filename)) + { + File.Delete(filename); + } + + // Reset to defaults + Settings.Default.Reset(); + Settings.Default.Save(); + + MessageBox.Show( + "Settings have been reset. Please restart the application.", + appName, + MessageBoxButton.OK, + MessageBoxImage.Information); + + Application.Current.Shutdown(); + } + catch (Exception deleteEx) + { + MessageBox.Show( + $"Failed to reset settings: {deleteEx.Message}\n\n" + + $"Please manually delete: {filename}", + appName, + MessageBoxButton.OK, + MessageBoxImage.Error); + Application.Current.Shutdown(); + } } else { - File.Delete(filename); + Application.Current.Shutdown(); } } - // need to restart, otherwise settings not loaded - Process.GetCurrentProcess().Kill(); + else + { + // No specific file, just reset + Settings.Default.Reset(); + Settings.Default.Save(); + } + } + catch (Exception ex) + { + Console.WriteLine($"Unexpected error loading settings: {ex.Message}"); + MessageBox.Show( + $"Error loading settings: {ex.Message}\n\nUsing defaults.", + appName, + MessageBoxButton.OK, + MessageBoxImage.Warning); } - } // LoadSettings() + } private void SaveSettingsOnExit() { @@ -835,6 +918,14 @@ void UpdateUnityInstallationsList() //preferredVersion = "none"; unityInstallationsSource = GetUnityInstallations.Scan(); + + if (unityInstallationsSource == null) + { + lblFoundXInstallations.Content = "Found 0 installations"; + dataGridUnitys.ItemsSource = null; + return; + } + dataGridUnitys.ItemsSource = unityInstallationsSource; // Also make dictionary of installed unitys, to search faster @@ -1261,7 +1352,7 @@ private void Window_Closing(object sender, CancelEventArgs e) { // (TODO force) close theme editor, if still open, TODO NEED to cancel all changes CloseThemeEditor(); - SaveSettingsOnExit(); + //SaveSettingsOnExit(); CloseHubPipeAsync(); } diff --git a/UnityLauncherPro/Properties/Settings.Designer.cs b/UnityLauncherPro/Properties/Settings.Designer.cs index 448598d..778ca0f 100644 --- a/UnityLauncherPro/Properties/Settings.Designer.cs +++ b/UnityLauncherPro/Properties/Settings.Designer.cs @@ -637,5 +637,17 @@ public bool fetchAdditionalInfo { this["fetchAdditionalInfo"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool @__UpgradedOnce { + get { + return ((bool)(this["__UpgradedOnce"])); + } + set { + this["__UpgradedOnce"] = value; + } + } } } diff --git a/UnityLauncherPro/Properties/Settings.settings b/UnityLauncherPro/Properties/Settings.settings index 6cea055..d3c203c 100644 --- a/UnityLauncherPro/Properties/Settings.settings +++ b/UnityLauncherPro/Properties/Settings.settings @@ -160,5 +160,8 @@ False + + False + \ No newline at end of file diff --git a/UnityLauncherPro/UnityLauncherPro.csproj b/UnityLauncherPro/UnityLauncherPro.csproj index aedb110..ca500c6 100644 --- a/UnityLauncherPro/UnityLauncherPro.csproj +++ b/UnityLauncherPro/UnityLauncherPro.csproj @@ -1,6 +1,6 @@  - net8.0-windows + net8.0-windows10.0.19041.0 WinExe publish\ true @@ -22,6 +22,7 @@ true Images/icon.ico app.manifest + 10.0.19041.0 @@ -51,6 +52,19 @@ - + + + + + True + True + Settings.settings + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + \ No newline at end of file