Skip to content

Commit

Permalink
Add Legacy Games and Riot Client platforms and optional Legendary for…
Browse files Browse the repository at this point in the history
… Epic Games support. Use .NET publish instead of Costura Fody. (#47)

* Add IGClient

Also updates to README.md and icon for Battle.net

* Better Amazon implementation by ingesting SQLite database

* Switch to .ini; File browser for export shortcuts

* Switch config items from .json to .ini
* First pass at new feature: Export all shortcuts for a platform to a given folder

* Fixes for small list icons

* Fix small list icons, and enable them by default
Also:
* Don't show Steamworks Common Redistributables

* Additional fixes for #32, misc.

Miscellaneous:
* Add a variable (on by default) to use new campbell terminal colors when clearing image area with images < 48 pt resolution
* Use new configuration item to determine whether to do deeper icon scan instead of whether images are enabled at the moment
* Add a struct for volatile configuration variables when we don't want changes to be saved; e.g., users of conhost and other shells won't have images disabled for good when they run with the other shell

* Fixes for .ini change

* Update to Converter.cs after .ini change
* Undo half-completed move from glc-last.json to .ini
Also:
* Fix command-line only bug
* Put log in .exe's folder
* Allow hyphen (-) in addition to slash (/) for command-line parameters
* Specify which game will be launched with /1 in help

* Add launcher launching

Also:
* Fix reversed logic on fallback icon search setting
* Begin work on in-game settings menu

* Update README.md

* Fix missing Steam aliases

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Add structure for New games category

* Add New games platform

Also:
* Quit automatically if no games are found.
* Add checks for missing registry keys to prevent spamming logs.
* Fix redundant "WARNING: ERROR" logging.
* Add font detection (disabled for now) so "Raster Fonts" users are warned about lack of proper Unicode support

* Add IsNew field to db code

* Add IsInstalled field and "Not installed" category for future use

* Add Paradox Launcher; Scan for not-installed games

(Not-installed scan disabled by default for now.) Currently only works with Amazon, itch, Indiegala, and Paradox (other platforms will require dealing with web APIs). Trying to start a not-installed game will open appropriate client and in some cases will attempt to install it. Not-installed games are sorted to bottom by default.

* Update README.md

* Go back to doing an alphabetic sort on first scan (even where default sort is frequency, i.e., number of launches)

* Get Steam not-installed games

Note this method requires the user's profile be set as public, and DLCs are included in the list.
Also:
* Enable not-installed game scanning by default.
* Fix broken input mode
* Fix bug where frequency sort was reversed
* Output current selection on input row (helps distinguish games with long titles)

* Update README.md

* Add selected game's platform to right side of bottom row

Also:
* Fix bug in Steam alias generation

* Remove duplicate info bar code

* Add GOG SQLite database parsing

* Update GLC_Social.png

* Improve Big Fish implementation

* Longer sleep to prevent image issues after add of infobar

* Fix for Steam sometimes using an alternate syntax in libraryfolders.vdf

Also some experiments for Microsoft Store support (disabled)

* Oops, forgot to comment out something from Microsoft Store

* Launch Galaxy to install/run GOG games (necessary for syncing saves)

* Minimize Galaxy after launch, fix Bethesda bug, misc. path smarts

* Collect Ubisoft not-installed games

* Add Oculus platform

* Update README.md

* Update Platform.cs

* Platforms moved to their own classes

* Platforms now extend an interface for better extensibility
* Add Oculus platform
* Download images for not-installed games

* Another omnibus

* Move to .NET 5 as preparation for GLC2 and possible cross-platform support.
* Automatically add last run date
* Add rating and allow user to adjust it with +/- (by default)
* More flexibility in sort
* Sort between last run, frequency, rating, and alphabetic only with F7 (by default)
* Syntax simplification
* Experiments with Microsoft Store (enabled for debug builds only)

* Add alias and rating to info bar

Also:
* If currently sorting by rating, then ask for a number rather than using the increment/decrement methods

* Fix Battle.net bug

Also:
* More syntax simplification

* Fix Bethesda bug

* Better game library detection for Battle.net

Also:
* Add number of runs to game database [frequency is an interesting synthesis of recent datetime and number of runs that isn't fully captured by the two numbers, but having the simple number might be nice as well]
* Import some statistics from launcher databases [though perhaps setting(s) should be made to disable this behavior]

* Get proper titles for Oculus games from database blob

* Fix Uplay bug

* Get not-installed Oculus games

* Remove some Oculus debug messages

* Fix Paradox debug message

* Fix issue starting games via protocol after switch to .NET 5

* Fix issue starting launchers via protocol after switch to .NET 5

* Fix issues related to search: #36 #38 #43

* Add Rockstar platform

Also:
* Stop Oculus service before scanning (otherwise database is locked)
* Fix double-counting games when multiple regkey ignore entries are present

* Add Arc platform

* Add Plarium and Wargaming.net platforms

* Fix Wargaming.net bugs

* Add Legacy Games platform

* Update README.md

* Deprecate Bethesda. Truncate aliases.

* Fix bug with alias truncation.

* Optionally support Legendary for Epic

https://github.com/derrod/legendary

* Optionally support Legendary for Epic

https://github.com/derrod/legendary

* Add Riot Client platform

* Update supported platform lists

* Use built-in .NET Publish feature instead of Costura Fody package

Also:
* .lnk shortcut files (and shell32) only apply to Windows
* update some packages
* add README.MD to Solution

* Set ReadyToRun false
  • Loading branch information
Nutzzz authored Jul 1, 2022
1 parent 92bb36e commit 217f753
Show file tree
Hide file tree
Showing 32 changed files with 664 additions and 219 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<StartupObject>DataConversionTool.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.3.246501">
<PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.3.326103">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
Expand Down
5 changes: 5 additions & 0 deletions GameLauncher_Console/GameLauncher_Console.sln
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataConversionTool", "DataC
{4EBCEF5B-1A8A-42FB-81DB-446A14ED15D1} = {4EBCEF5B-1A8A-42FB-81DB-446A14ED15D1}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{97388049-6F2B-4BDC-A2DD-A545EE118082}"
ProjectSection(SolutionItems) = preProject
..\README.md = ..\README.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down
18 changes: 15 additions & 3 deletions GameLauncher_Console/GameLauncher_Console/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,18 @@
<setting name="flag_image_do_not_download_missing" serializeAs="String">
<value>False</value>
</setting>
<setting name="flag_sync_legendary_saves" serializeAs="String">
<value>True</value>
</setting>
<setting name="flag_use_legendary_for_epic" serializeAs="String">
<value>False</value>
</setting>
<setting name="list_show_uwp_titles" serializeAs="String">
<value>Angry Birds 2|Angry Birds Friends|Bloons TD Battles|Bloons Monkey City|Candy Crush Saga|Candy Crush Soda Saga|Candy Crush Jelly Saga|Crossy Road|Minecraft|Phase 10 2|Roblox</value>
</setting>
<setting name="num_alias_max_length" serializeAs="String">
<value>15</value>
</setting>
<setting name="num_list_icons_max_size_in_characters" serializeAs="String">
<value>2</value>
</setting>
Expand Down Expand Up @@ -316,6 +325,9 @@
<setting name="key_cancel_2" serializeAs="String">
<value>NoName</value>
</setting>
<setting name="key_new_game_1" serializeAs="String">
<value>NoName</value>
</setting>
<setting name="key_new_game_2" serializeAs="String">
<value>N</value>
</setting>
Expand Down Expand Up @@ -409,6 +421,9 @@
<setting name="key_download_image_2" serializeAs="String">
<value>NoName</value>
</setting>
<setting name="path_legendary_exe" serializeAs="String">
<value>legendary.exe</value>
</setting>
<setting name="text_main_menu_title" serializeAs="String">
<value>Main Menu</value>
</setting>
Expand Down Expand Up @@ -451,9 +466,6 @@
<setting name="text_instruct2_games_type_custom_msg" serializeAs="String">
<value> Enter \'/exit\' to quit;\n Enter \'/back\' to return to previous.</value>
</setting>
<setting name="key_new_game_1" serializeAs="String">
<value>NoName</value>
</setting>
</GameLauncher_Console.Properties.Settings>
</userSettings>
<entityFramework>
Expand Down
4 changes: 4 additions & 0 deletions GameLauncher_Console/GameLauncher_Console/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,13 @@ public struct Colours
public const string CFG_IMGBGLEG = "flag_image_use_legacy_background_colours";
public const string CFG_IMGSCAN = "flag_image_do_not_do_deep_scan_for_icons";
public const string CFG_IMGDOWN = "flag_image_do_not_download_missing";
public const string CFG_SYNCLEG = "flag_sync_legendary_saves";
public const string CFG_USELEG = "flag_use_legendary_for_epic";
#if DEBUG
public const string CFG_UWPLIST = "list_show_uwp_titles";
#endif
// images only work in conhost (cmd or PowerShell and some 3rd party shells), but not in others, e.g., Windows Terminal, TCC, etc.
public const string CFG_ALIASLEN = "num_alias_max_length";
public const string CFG_ICONSIZE = "num_list_icons_max_size_in_characters"; // only in list mode, icons for all games on left; set to 0 to disable
public const string CFG_ICONRES = "num_list_icons_resolution"; // up to 256, but setting higher than 48 causes icons with 32x32 max size to have a border and become smaller by comparison
public const string CFG_IMGSIZE = "num_selected_image_max_size_in_characters"; // the icon for the selected game on right; set to 0 to disable
Expand Down Expand Up @@ -261,6 +264,7 @@ public struct Colours
public const string CFG_KEYRATEDN2 = "key_rating_down_2";
public const string CFG_KEYDLIMG1 = "key_download_image_1"; // TODO
public const string CFG_KEYDLIMG2 = "key_download_image_2";
public const string CFG_PATHLEG = "path_legendary_exe";
public const string CFG_TXTMAINT = "text_main_menu_title";
public const string CFG_TXTCFGT = "text_settings_title";
public const string CFG_TXTFILET = "text_browse_title";
Expand Down
2 changes: 1 addition & 1 deletion GameLauncher_Console/GameLauncher_Console/ConsoleHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -836,7 +836,7 @@ public int HandleNavigationMenu(int nStartY, int nStopY, CConfig.ConfigVolatile
return (int)DockSelection.cSel_Alias; // Set alias for insert mode or command line parameter
}
else if (key == keys.scanCK1 || key == keys.scanCK2)
return (int)DockSelection.cSel_Rescan; // Rescan the registry and the 'customGames' folder for new games
return (int)DockSelection.cSel_Rescan; // Rescan the registry and the 'CustomGames' folder for new games

} while (key != keys.selectCK1 && key != keys.selectCK2);

Expand Down
6 changes: 5 additions & 1 deletion GameLauncher_Console/GameLauncher_Console/ConsoleImage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ public static void ShowImageBorder(Size size, Point point, int xCushion, int yCu
linePercent = 4;
}

for (int y = point.Y - yCushion; y < point.Y + size.Height + 1; ++y)
for (int y = point.Y - yCushion; y < point.Y + size.Height; ++y)
{
if (y < 0) y = 0;
Console.SetCursorPosition(point.X - xCushion - 1, y);
Expand Down Expand Up @@ -531,6 +531,10 @@ private static void ShowPlatformImage(int selection, Size size, Point point, str
icon = new Icon(Properties.Resources._24, res, res);
else if (platform.StartsWith(GetPlatformString(25)))
icon = new Icon(Properties.Resources._25, res, res);
else if (platform.StartsWith(GetPlatformString(26)))
icon = new Icon(Properties.Resources._26, res, res);
else if (platform.StartsWith(GetPlatformString(27)))
icon = new Icon(Properties.Resources._27, res, res);
else if (platform.Equals(CConfig.GetConfigString(CConfig.CFG_TXTCFGT))) // Settings
icon = new Icon(Properties.Resources.settings, res, res);
else
Expand Down
141 changes: 126 additions & 15 deletions GameLauncher_Console/GameLauncher_Console/Dock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public class CDock
public static int m_nSelectedGame = -1;
public static int m_nCurrentSelection = 0;

public static readonly string currentPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
public static readonly string currentPath = Path.GetDirectoryName(AppContext.BaseDirectory);
public static readonly string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
public static readonly List<string> supportedImages = new() { "ICO", "PNG", "JPG", "JPE", "JPEG", "GIF", "BMP", "TIF", "TIFF", "EPR", "EPRT" };
public static bool noInteractive = false;
Expand All @@ -67,8 +67,8 @@ public class CDock
// 0|-------|---------|---------|---------|---------|---------|---------|---------|80
" This program will scan your system for installed video games and display",
" them as a list. The following platforms are supported:",
" * Amazon * Battle.net * Bethesda * Big Fish * Epic * GOG * Indiegala * itch",
" * Oculus * Origin * Paradox * Steam * Ubisoft * custom",
" * Amazon * Battle.net * Big Fish * Epic * GOG * Indiegala * itch * Legacy",
" * Oculus * Origin * Paradox * Plarium * Riot * Steam * Ubisoft * Wargaming",
"",
" The games list and configuration are stored in .json files in the same folder",
" as this program. You can manually add games by placing a shortcut (.lnk) in",
Expand All @@ -91,17 +91,19 @@ public void MainLoop(string[] args)
platforms.AddSupportedPlatform(new PlatformAmazon());
platforms.AddSupportedPlatform(new PlatformArc());
platforms.AddSupportedPlatform(new PlatformBattlenet());
platforms.AddSupportedPlatform(new PlatformBethesda());
//platforms.AddSupportedPlatform(new PlatformBethesda()); // deprecated May 2022
platforms.AddSupportedPlatform(new PlatformBigFish());
//platforms.AddSupportedPlatform(new PlatformCustom()); // See CPlatform.ScanGames()
//platforms.AddSupportedPlatform(new PlatformCustom()); // See CPlatform.ScanGames()
platforms.AddSupportedPlatform(new PlatformEpic());
platforms.AddSupportedPlatform(new PlatformGOG());
platforms.AddSupportedPlatform(new PlatformIGClient());
platforms.AddSupportedPlatform(new PlatformItch());
platforms.AddSupportedPlatform(new PlatformLegacy());
platforms.AddSupportedPlatform(new PlatformOculus());
platforms.AddSupportedPlatform(new PlatformOrigin());
platforms.AddSupportedPlatform(new PlatformParadox());
platforms.AddSupportedPlatform(new PlatformPlarium());
platforms.AddSupportedPlatform(new PlatformRiot());
platforms.AddSupportedPlatform(new PlatformRockstar());
platforms.AddSupportedPlatform(new PlatformSteam());
platforms.AddSupportedPlatform(new PlatformUplay());
Expand Down Expand Up @@ -174,7 +176,7 @@ public void MainLoop(string[] args)
{
if (OperatingSystem.IsWindows())
{
if (PathEnvironmentUpdate.Add(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), false))
if (PathEnvironmentUpdate.Add(Path.GetDirectoryName(AppContext.BaseDirectory), false))
{
CLogger.LogInfo("Added program location to PATH.");
Console.WriteLine("Added {0}.exe location to your PATH environment variable.", FILENAME);
Expand Down Expand Up @@ -882,7 +884,11 @@ from part in newTags.Split('|')
PlatformEpic.Launch();
break;
case GamePlatform.Bethesda:
PlatformBethesda.Launch();
//PlatformBethesda.Launch();
//SetFgColour(cols.errorCC, cols.errorLtCC);
CLogger.LogWarn("Bethesda Launcher was deprecated May 2022");
Console.WriteLine("ERROR: Bethesda Launcher was deprecated in May 2022!");
//Console.ResetColor();
break;
case GamePlatform.Battlenet:
PlatformBattlenet.Launch();
Expand All @@ -908,8 +914,7 @@ from part in newTags.Split('|')
case GamePlatform.Plarium:
PlatformPlarium.Launch();
break;
case GamePlatform.Twitch: // TODO?
//PlatformTwitch.Launch();
case GamePlatform.Twitch: // deprecated
break;
case GamePlatform.Wargaming:
PlatformWargaming.Launch();
Expand All @@ -924,6 +929,12 @@ from part in newTags.Split('|')
case GamePlatform.Oculus:
PlatformOculus.Launch();
break;
case GamePlatform.Legacy:
PlatformLegacy.Launch();
break;
case GamePlatform.Riot: // TODO
PlatformRiot.Launch();
break;
default:
break;
}
Expand Down Expand Up @@ -981,7 +992,7 @@ from part in newTags.Split('|')
Console.WriteLine("Frequency : {0}", selectedGame.Frequency);
Console.WriteLine(" Rating : {0}", selectedGame.Rating);
Console.WriteLine();
Console.WriteLine("DEBUG mode - game will not be launched; press Enter to exit...");
Console.Write("DEBUG mode - game will not be launched; press Enter to exit...");
if (noInteractive)
cfgv.imageSize = 0;
else
Expand All @@ -999,7 +1010,14 @@ from part in newTags.Split('|')
{
CConsoleImage.ShowImageBorder(sizeImage, locImage, IMG_BORDER_X_CUSHION, IMG_BORDER_Y_CUSHION);
CConsoleImage.ShowImage(m_nCurrentSelection, selectedGame.Title, selectedGame.Icon, false, sizeImage, locImage, CConsoleHelper.m_LightMode == CConsoleHelper.LightMode.cColour_Light ? cols.bgLtCC : cols.bgCC);
Console.SetCursorPosition(0, 8);
int ww = Console.WindowWidth;
int y = 10;
if (ww > 62)
{
ww = 62;
y++;
}
Console.SetCursorPosition(ww, y);
}
else
CConsoleImage.ShowImage(m_nCurrentSelection, selectedGame.Title, selectedGame.Icon, false, sizeImage, locImage, CConsoleHelper.m_LightMode == CConsoleHelper.LightMode.cColour_Light ? cols.bgLtCC : cols.bgCC);
Expand Down Expand Up @@ -1180,6 +1198,31 @@ private bool InstallGame(CGame game, CConfig.Colours cols)
return true;
}
return false;
case GamePlatform.Epic:
if ((bool)CConfig.GetConfigBool(CConfig.CFG_USELEG) &&
!string.IsNullOrEmpty(CConfig.GetConfigString(CConfig.CFG_PATHLEG)))
{
string pathLeg = CConfig.GetConfigString(CConfig.CFG_PATHLEG);
if (OperatingSystem.IsWindows())
{
CLogger.LogInfo($"Launch: cmd.exe /c '\"" + pathLeg + "\" -y install " + game.ID + " '");
Process.Start("cmd.exe", "/c '\"" + pathLeg + "\" -y install " + game.ID + " '");
}
else
{
CLogger.LogInfo($"Launch: " + pathLeg + " -y install " + game.ID);
Process.Start(pathLeg, "-y install " + game.ID);
}
return true;
}
else
{
//SetFgColour(cols.errorCC, cols.errorLtCC);
CLogger.LogWarn("Install not supported for this platform.");
Console.WriteLine("Install not supported for this platform.");
//Console.ResetColor();
}
return false;
case GamePlatform.Uplay:
// Some games don't provide a valid ID; provide an error in that case
if (game.ID.StartsWith(PlatformUplay.UPLAY_PREFIX))
Expand Down Expand Up @@ -1267,10 +1310,30 @@ private bool UninstallGame(CGame game)
}
if (string.IsNullOrEmpty(game.Uninstaller))
{
//SetFgColour(cols.errorCC, cols.errorLtCC);
CLogger.LogWarn("Uninstaller not found.");
Console.WriteLine("An uninstaller wasn't found.");
//Console.ResetColor();
if (game.Platform == GamePlatform.Epic &&
(bool)CConfig.GetConfigBool(CConfig.CFG_USELEG) &&
!string.IsNullOrEmpty(CConfig.GetConfigString(CConfig.CFG_PATHLEG)))
{
string pathLeg = CConfig.GetConfigString(CConfig.CFG_PATHLEG);
if (OperatingSystem.IsWindows())
{
CLogger.LogInfo("Launch: cmd.exe /c '\"" + pathLeg + "\" -y uninstall " + game.ID + " '");
Process.Start("cmd.exe", "/c '\"" + pathLeg + "\" -y uninstall " + game.ID + " '");
}
else
{
CLogger.LogInfo("Launch: " + pathLeg + " -y uninstall " + game.ID);
Process.Start(pathLeg, "-y uninstall " + game.ID);
}
return true;
}
else
{
//SetFgColour(cols.errorCC, cols.errorLtCC);
CLogger.LogWarn("Uninstaller not found.");
Console.WriteLine("An uninstaller wasn't found.");
//Console.ResetColor();
}
return false;
}
Console.ResetColor();
Expand All @@ -1279,6 +1342,7 @@ private bool UninstallGame(CGame game)
Console.WriteLine($"Uninstalling game: {game.Title}");
try
{
CLogger.LogInfo("Launch: " + game.Uninstaller);
if (OperatingSystem.IsWindows())
StartShellExecute(game.Uninstaller);
else
Expand Down Expand Up @@ -1307,6 +1371,46 @@ private bool StartGame(CGame game)
{
switch (game.Platform)
{
case GamePlatform.Bethesda:
//PlatformBethesda.Launch();
//SetFgColour(cols.errorCC, cols.errorLtCC);
CLogger.LogWarn("Bethesda Launcher was deprecated May 2022");
Console.WriteLine("ERROR: Bethesda Launcher was deprecated in May 2022!");
//Console.ResetColor();
return false;
case GamePlatform.Epic:
bool useLeg = (bool)CConfig.GetConfigBool(CConfig.CFG_USELEG);
bool syncLeg = (bool)CConfig.GetConfigBool(CConfig.CFG_SYNCLEG);
string pathLeg = CConfig.GetConfigString(CConfig.CFG_PATHLEG);

if (useLeg && !string.IsNullOrEmpty(pathLeg))
{
if (OperatingSystem.IsWindows())
{
string cmdLine = "\"" + pathLeg + "\" -y launch " + game.ID;
CLogger.LogInfo($"Launch: cmd.exe /c '" + cmdLine + " '");
if (syncLeg)
cmdLine = "\"" + pathLeg + "\" -y sync-saves " + game.ID + " & " + cmdLine + " & \"" + pathLeg + "\" -y sync-saves " + game.ID;
Process.Start("cmd.exe", "/c '" + cmdLine + " '");
}
else
{
CLogger.LogInfo($"Launch: " + pathLeg + " -y launch " + game.ID);
if (syncLeg)
Process.Start(pathLeg, "-y sync-saves " + game.ID);
Process.Start(pathLeg, "-y launch " + game.ID);
if (syncLeg)
Process.Start(pathLeg, "-y sync-saves " + game.ID);
}
}
else
{
if (OperatingSystem.IsWindows())
StartShellExecute(game.Launch);
else
Process.Start(game.Launch);
}
break;
case GamePlatform.GOG:
PlatformGOG.StartGame(game);
break;
Expand Down Expand Up @@ -1925,6 +2029,13 @@ public static void DeleteCustomImage(string title)
}
}

[SupportedOSPlatform("windows")]
public static Guid GetGuid()
{
using RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Cryptography", RegistryKeyPermissionCheck.ReadSubTree); // HKLM64
return Guid.Parse((string)key.GetValue("MachineGuid"));
}

[SupportedOSPlatform("windows")]
public static void StartShellExecute(string file)
{
Expand Down
3 changes: 0 additions & 3 deletions GameLauncher_Console/GameLauncher_Console/FodyWeavers.xml

This file was deleted.

Loading

0 comments on commit 217f753

Please sign in to comment.