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
2 changed files with 45 additions and 12 deletions
|
@ -295,14 +295,7 @@ namespace Ryujinx.Modules
|
||||||
if (shouldRestart)
|
if (shouldRestart)
|
||||||
{
|
{
|
||||||
List<string> arguments = CommandLineState.Arguments.ToList();
|
List<string> arguments = CommandLineState.Arguments.ToList();
|
||||||
string ryuName = Path.GetFileName(Environment.ProcessPath);
|
|
||||||
string executableDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
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.
|
// On macOS we perform the update at relaunch.
|
||||||
if (OperatingSystem.IsMacOS())
|
if (OperatingSystem.IsMacOS())
|
||||||
|
@ -310,13 +303,42 @@ namespace Ryujinx.Modules
|
||||||
string baseBundlePath = Path.GetFullPath(Path.Combine(executableDirectory, "..", ".."));
|
string baseBundlePath = Path.GetFullPath(Path.Combine(executableDirectory, "..", ".."));
|
||||||
string newBundlePath = Path.Combine(UpdateDir, "Ryujinx.app");
|
string newBundlePath = Path.Combine(UpdateDir, "Ryujinx.app");
|
||||||
string updaterScriptPath = Path.Combine(newBundlePath, "Contents", "Resources", "updater.sh");
|
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 });
|
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);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using Gdk;
|
using Gdk;
|
||||||
using Gtk;
|
using Gtk;
|
||||||
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Ui;
|
using Ryujinx.Ui;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.Ui.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.Ui.Common.Helper;
|
||||||
|
@ -47,9 +48,19 @@ namespace Ryujinx.Modules
|
||||||
if (_restartQuery)
|
if (_restartQuery)
|
||||||
{
|
{
|
||||||
string ryuName = OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx";
|
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);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue