mirror of
				https://github.com/Ryujinx/Ryujinx.git
				synced 2025-11-04 01:03:43 +00:00 
			
		
		
		
	Fix the restart after an update. (#4869)
* Fix the restart after an update. * Fix the updater for the Ava UI too. * Fixing up the code after some change requests. Removed a line of code that was accidentally left in. * Fix restarting on Linux Avalonia. * Fix issues with escaped arguments.
This commit is contained in:
		
							parent
							
								
									531da8a1c0
								
							
						
					
					
						commit
						49c63ea077
					
				@ -295,14 +295,7 @@ namespace Ryujinx.Modules
 | 
			
		||||
                if (shouldRestart)
 | 
			
		||||
                {
 | 
			
		||||
                    List<string> arguments = CommandLineState.Arguments.ToList();
 | 
			
		||||
                    string ryuName = Path.GetFileName(Environment.ProcessPath);
 | 
			
		||||
                    string executableDirectory = AppDomain.CurrentDomain.BaseDirectory;
 | 
			
		||||
                    string executablePath = Path.Combine(executableDirectory, ryuName);
 | 
			
		||||
 | 
			
		||||
                    if (!Path.Exists(executablePath))
 | 
			
		||||
                    {
 | 
			
		||||
                        executablePath = Path.Combine(executableDirectory, OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx");
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    // On macOS we perform the update at relaunch.
 | 
			
		||||
                    if (OperatingSystem.IsMacOS())
 | 
			
		||||
@ -310,13 +303,42 @@ namespace Ryujinx.Modules
 | 
			
		||||
                        string baseBundlePath = Path.GetFullPath(Path.Combine(executableDirectory, "..", ".."));
 | 
			
		||||
                        string newBundlePath = Path.Combine(UpdateDir, "Ryujinx.app");
 | 
			
		||||
                        string updaterScriptPath = Path.Combine(newBundlePath, "Contents", "Resources", "updater.sh");
 | 
			
		||||
                        string currentPid = Process.GetCurrentProcess().Id.ToString();
 | 
			
		||||
                        string currentPid = Environment.ProcessId.ToString();
 | 
			
		||||
 | 
			
		||||
                        executablePath = "/bin/bash";
 | 
			
		||||
                        arguments.InsertRange(0, new List<string> { updaterScriptPath, baseBundlePath, newBundlePath, currentPid });
 | 
			
		||||
                        Process.Start("/bin/bash", arguments);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        // Find the process name.
 | 
			
		||||
                        string ryuName = Path.GetFileName(Environment.ProcessPath);
 | 
			
		||||
 | 
			
		||||
                        // Some operating systems can see the renamed executable, so strip off the .ryuold if found.
 | 
			
		||||
                        if (ryuName.EndsWith(".ryuold"))
 | 
			
		||||
                        {
 | 
			
		||||
                            ryuName = ryuName[..^7];
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        // Fallback if the executable could not be found.
 | 
			
		||||
                        if (!Path.Exists(Path.Combine(executableDirectory, ryuName)))
 | 
			
		||||
                        {
 | 
			
		||||
                            ryuName = OperatingSystem.IsWindows() ? "Ryujinx.Ava.exe" : "Ryujinx.Ava";
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        ProcessStartInfo processStart = new(ryuName)
 | 
			
		||||
                        {
 | 
			
		||||
                            UseShellExecute = true,
 | 
			
		||||
                            WorkingDirectory = executableDirectory
 | 
			
		||||
                        };
 | 
			
		||||
 | 
			
		||||
                        foreach (string argument in CommandLineState.Arguments)
 | 
			
		||||
                        {
 | 
			
		||||
                            processStart.ArgumentList.Add(argument);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        Process.Start(processStart);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Process.Start(executablePath, arguments);
 | 
			
		||||
                    Environment.Exit(0);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
using Gdk;
 | 
			
		||||
using Gtk;
 | 
			
		||||
using Ryujinx.Common;
 | 
			
		||||
using Ryujinx.Ui;
 | 
			
		||||
using Ryujinx.Ui.Common.Configuration;
 | 
			
		||||
using Ryujinx.Ui.Common.Helper;
 | 
			
		||||
@ -47,9 +48,19 @@ namespace Ryujinx.Modules
 | 
			
		||||
            if (_restartQuery)
 | 
			
		||||
            {
 | 
			
		||||
                string ryuName = OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx";
 | 
			
		||||
                string ryuExe  = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ryuName);
 | 
			
		||||
 | 
			
		||||
                Process.Start(ryuExe, CommandLineState.Arguments);
 | 
			
		||||
                ProcessStartInfo processStart = new(ryuName)
 | 
			
		||||
                {
 | 
			
		||||
                    UseShellExecute = true,
 | 
			
		||||
                    WorkingDirectory = ReleaseInformation.GetBaseApplicationDirectory()
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                foreach (string argument in CommandLineState.Arguments)
 | 
			
		||||
                {
 | 
			
		||||
                    processStart.ArgumentList.Add(argument);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                Process.Start(processStart);
 | 
			
		||||
 | 
			
		||||
                Environment.Exit(0);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user