From 86d91a3e4b1646f1c6ac2b96eec03398c0af637d Mon Sep 17 00:00:00 2001 From: erri120 <erri120@protonmail.com> Date: Sat, 14 Dec 2019 22:34:55 +0100 Subject: [PATCH 1/3] Added safety checks to the SteamHandler --- Wabbajack.Common/SteamHandler.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Wabbajack.Common/SteamHandler.cs b/Wabbajack.Common/SteamHandler.cs index 35934868..d69bfbb5 100644 --- a/Wabbajack.Common/SteamHandler.cs +++ b/Wabbajack.Common/SteamHandler.cs @@ -92,7 +92,8 @@ namespace Wabbajack.Common if (!l.Contains("BaseInstallFolder_")) return; var s = GetVdfValue(l); s = Path.Combine(s, "steamapps"); - paths.Add(s); + if(Directory.Exists(s)) + paths.Add(s); }); // Default path in the Steam folder isn't in the configs @@ -111,7 +112,7 @@ namespace Wabbajack.Common InstallFolders.Do(p => { - Directory.EnumerateFiles(p, "*.acf", SearchOption.TopDirectoryOnly).Do(f => + Directory.EnumerateFiles(p, "*.acf", SearchOption.TopDirectoryOnly).Where(File.Exists).Do(f => { var steamGame = new SteamGame(); var valid = false; @@ -157,7 +158,7 @@ namespace Wabbajack.Common if(!Directory.Exists(workshop)) return; - Directory.EnumerateFiles(workshop, "*.acf", SearchOption.TopDirectoryOnly).Do(f => + Directory.EnumerateFiles(workshop, "*.acf", SearchOption.TopDirectoryOnly).Where(File.Exists).Do(f => { if (Path.GetFileName(f) != $"appworkshop_{game.AppId}.acf") return; From e13a57009a0a58a8e986eb02c8ac72ca3389bb61 Mon Sep 17 00:00:00 2001 From: erri120 <erri120@protonmail.com> Date: Sat, 14 Dec 2019 22:40:10 +0100 Subject: [PATCH 2/3] Added ExtensionManager safety checks --- Wabbajack.Common/ExtensionManager.cs | 13 +++++++------ Wabbajack/Views/MainWindow.xaml.cs | 13 +++++++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Wabbajack.Common/ExtensionManager.cs b/Wabbajack.Common/ExtensionManager.cs index 34651409..1f0f5075 100644 --- a/Wabbajack.Common/ExtensionManager.cs +++ b/Wabbajack.Common/ExtensionManager.cs @@ -33,25 +33,26 @@ namespace Wabbajack.Common var progIDKey = Registry.CurrentUser.OpenSubKey(ProgIDPath); var tempKey = progIDKey?.OpenSubKey("shell\\open\\command"); if (progIDKey == null || tempKey == null) return true; - return tempKey.GetValue("").ToString().Equals($"\"{appPath}\" -i \"%1\""); + var value = tempKey.GetValue(""); + return value == null || value.ToString().Equals($"\"{appPath}\" -i \"%1\""); } public static bool IsAssociated() { var progIDKey = Registry.CurrentUser.OpenSubKey(ProgIDPath); var extKey = Registry.CurrentUser.OpenSubKey(ExtPath); - return (progIDKey != null && extKey != null); + return progIDKey != null && extKey != null; } public static void Associate(string appPath) { var progIDKey = Registry.CurrentUser.CreateSubKey(ProgIDPath, RegistryKeyPermissionCheck.ReadWriteSubTree); - foreach (KeyValuePair<string, string> entry in ProgIDList) + foreach (var entry in ProgIDList) { if (entry.Key.Contains("\\")) { - var tempKey = progIDKey.CreateSubKey(entry.Key); - tempKey.SetValue("", entry.Value.Replace("{appPath}", appPath)); + var tempKey = progIDKey?.CreateSubKey(entry.Key); + tempKey?.SetValue("", entry.Value.Replace("{appPath}", appPath)); } else { @@ -60,7 +61,7 @@ namespace Wabbajack.Common } var extKey = Registry.CurrentUser.CreateSubKey(ExtPath, RegistryKeyPermissionCheck.ReadWriteSubTree); - foreach (KeyValuePair<string, string> entry in ExtList) + foreach (var entry in ExtList) { extKey?.SetValue(entry.Key, entry.Value); } diff --git a/Wabbajack/Views/MainWindow.xaml.cs b/Wabbajack/Views/MainWindow.xaml.cs index bf7cbe01..9c9139aa 100644 --- a/Wabbajack/Views/MainWindow.xaml.cs +++ b/Wabbajack/Views/MainWindow.xaml.cs @@ -4,6 +4,7 @@ using System.Windows; using MahApps.Metro.Controls; using Wabbajack.Common; using Application = System.Windows.Application; +using Utils = Wabbajack.Common.Utils; namespace Wabbajack { @@ -25,10 +26,18 @@ namespace Wabbajack }; var appPath = System.Reflection.Assembly.GetExecutingAssembly().Location; - if (!ExtensionManager.IsAssociated() || ExtensionManager.NeedsUpdating(appPath)) + try { - ExtensionManager.Associate(appPath); + if (!ExtensionManager.IsAssociated() || ExtensionManager.NeedsUpdating(appPath)) + { + ExtensionManager.Associate(appPath); + } } + catch (Exception e) + { + Utils.Log($"ExtensionManager had an exception:\n{e}"); + } + Wabbajack.Common.Utils.Log($"Wabbajack Build - {ThisAssembly.Git.Sha}"); From 3c21dfd7818d706c851b6dd38df2dfbc1fc0ead6 Mon Sep 17 00:00:00 2001 From: erri120 <erri120@protonmail.com> Date: Sat, 14 Dec 2019 22:43:47 +0100 Subject: [PATCH 3/3] Added check for InstallDir --- Wabbajack.Common/SteamHandler.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Wabbajack.Common/SteamHandler.cs b/Wabbajack.Common/SteamHandler.cs index d69bfbb5..9fe0c695 100644 --- a/Wabbajack.Common/SteamHandler.cs +++ b/Wabbajack.Common/SteamHandler.cs @@ -97,7 +97,8 @@ namespace Wabbajack.Common }); // Default path in the Steam folder isn't in the configs - paths.Add(Path.Combine(SteamPath, "steamapps")); + if(Directory.Exists(Path.Combine(SteamPath, "steamapps"))) + paths.Add(Path.Combine(SteamPath, "steamapps")); InstallFolders = paths; } @@ -123,8 +124,11 @@ namespace Wabbajack.Common return; if(l.Contains("\"name\"")) steamGame.Name = GetVdfValue(l); - if(l.Contains("\"installdir\"")) - steamGame.InstallDir = Path.Combine(p, "common", GetVdfValue(l)); + if (l.Contains("\"installdir\"")) + { + var path = Path.Combine(p, "common", GetVdfValue(l)); + steamGame.InstallDir = Directory.Exists(path) ? path : null; + } if (steamGame.AppId != 0 && !string.IsNullOrWhiteSpace(steamGame.Name) && !string.IsNullOrWhiteSpace(steamGame.InstallDir))