diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2018-06-08 19:10:42 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2018-06-08 19:10:42 -0400 |
commit | a6741cce9bb408c44b94f9a8d814856a9cfc806f (patch) | |
tree | b3a83ead5cac93842a7f9a77e4b409b3e6076e34 /src | |
parent | 86a3f8dd460f329fad903770231016813e750168 (diff) | |
download | SMAPI-a6741cce9bb408c44b94f9a8d814856a9cfc806f.tar.gz SMAPI-a6741cce9bb408c44b94f9a8d814856a9cfc806f.tar.bz2 SMAPI-a6741cce9bb408c44b94f9a8d814856a9cfc806f.zip |
detect game install path via Steam library path (#512)
Thanks to InkyQuill!
Diffstat (limited to 'src')
-rw-r--r-- | src/SMAPI.Installer/InteractiveInstaller.cs | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/SMAPI.Installer/InteractiveInstaller.cs b/src/SMAPI.Installer/InteractiveInstaller.cs index 02dd6891..30cb10b4 100644 --- a/src/SMAPI.Installer/InteractiveInstaller.cs +++ b/src/SMAPI.Installer/InteractiveInstaller.cs @@ -66,6 +66,11 @@ namespace StardewModdingApi.Installer if (!string.IsNullOrWhiteSpace(path)) yield return path; } + + // via Steam library path + string steampath = this.GetCurrentUserRegistryValue(@"Software\Valve\Steam", "SteamPath"); + if (steampath != null) + yield return Path.Combine(steampath.Replace('/', '\\'), @"steamapps\common\Stardew Valley"); } break; @@ -133,11 +138,11 @@ namespace StardewModdingApi.Installer /// Initialisation flow: /// 1. Collect information (mainly OS and install path) and validate it. /// 2. Ask the user whether to install or uninstall. - /// + /// /// Uninstall logic: /// 1. On Linux/Mac: if a backup of the launcher exists, delete the launcher and restore the backup. /// 2. Delete all files and folders in the game directory matching one of the values returned by <see cref="GetUninstallPaths"/>. - /// + /// /// Install flow: /// 1. Run the uninstall flow. /// 2. Copy the SMAPI files from package/Windows or package/Mono into the game directory. @@ -431,7 +436,7 @@ namespace StardewModdingApi.Installer return str; } - /// <summary>Get the value of a key in the Windows registry.</summary> + /// <summary>Get the value of a key in the Windows HKLM registry.</summary> /// <param name="key">The full path of the registry key relative to HKLM.</param> /// <param name="name">The name of the value.</param> private string GetLocalMachineRegistryValue(string key, string name) @@ -444,6 +449,19 @@ namespace StardewModdingApi.Installer return (string)openKey.GetValue(name); } + /// <summary>Get the value of a key in the Windows HKCU registry.</summary> + /// <param name="key">The full path of the registry key relative to HKCU.</param> + /// <param name="name">The name of the value.</param> + private string GetCurrentUserRegistryValue(string key, string name) + { + RegistryKey currentuser = Environment.Is64BitOperatingSystem ? RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64) : Registry.CurrentUser; + RegistryKey openKey = currentuser.OpenSubKey(key); + if (openKey == null) + return null; + using (openKey) + return (string)openKey.GetValue(name); + } + /// <summary>Print a debug message.</summary> /// <param name="text">The text to print.</param> private void PrintDebug(string text) => this.ConsoleWriter.WriteLine(text, ConsoleLogLevel.Debug); @@ -602,6 +620,8 @@ namespace StardewModdingApi.Installer where dir.Exists && dir.EnumerateFiles(executableFilename).Any() select dir ) + .GroupBy(p => p.FullName, StringComparer.InvariantCultureIgnoreCase) // ignore duplicate paths + .Select(p => p.First()) .ToArray(); // choose where to install |