private static void RunGame() { Logger.Log(LogLevel.Info, "Patching is complete. Launching the game..."); if (!Configuration.GameExecutableName.IsNullOrWhiteSpace()) { Logger.Log("Starting main process"); Process.Start(Configuration.Executable, Configuration.ExecArgs); Logger.Log( $"Searching for process {Configuration.GameExecutableName}. Press CTRL+C to stop and close UULauncher..."); Process[] processes; do { processes = Process.GetProcessesByName(Configuration.GameExecutableName); } while (processes.Length == 0); Logger.Log(LogLevel.Info, "Found process! Binding..."); GameProcess = Process.GetProcessById(processes[0].Id); Logger.Log(LogLevel.Info, "Done!"); } else { GameProcess = Process.Start(Configuration.Executable, Configuration.ExecArgs); if (GameProcess == null) { Logger.Log(LogLevel.Error, "The process could not be started. Exiting..."); Environment.Exit(-1); } Logger.Log(LogLevel.Info, "Game process launched!"); } ConsoleUtils.SetConsoleCtrlHandler(HandleConsoleCtrl, true); Logger.StopTime(); Logger.Log(LogLevel.Warning, "NOTE: DO NOT close this window while the game is running. UULauncher will perform clean-up after the game is closed."); IntPtr consoleHandle = ConsoleUtils.GetConsoleWindow(); if (Configuration.HideWhileGameRuns) { ConsoleUtils.ShowWindow(consoleHandle, ConsoleUtils.SW_HIDE); } GameProcess.WaitForExit(); if (Configuration.HideWhileGameRuns) { ConsoleUtils.ShowWindow(consoleHandle, ConsoleUtils.SW_SHOW); } Logger.Log(LogLevel.Info, "Game exited"); PatcherManager.RunRestoreAssemblies(); }
private static bool HandleConsoleCtrl(int eventType) { switch (eventType) { case ConsoleUtils.CTRL_C_EVENT: case ConsoleUtils.CTRL_BREAK_EVENT: case ConsoleUtils.CTRL_CLOSE_EVENT: Logger.Log(LogLevel.Warning, "UULauncher has been closed suddenly! Closing game..."); GameProcess.Kill(); PatcherManager.RunRestoreAssemblies(); break; } return(true); }