aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn <loneboco@gmail.com>2023-05-11 17:14:29 -0700
committerGitHub <noreply@github.com>2023-05-12 02:14:29 +0200
commit49c63ea07779eb27674ae8c4a14e1dcf4b794a95 (patch)
treeacac13e26053e2b0862635884b45d38693f91d6d /src
parent531da8a1c0760c8ebf121ac83ba4c840ead9e443 (diff)
Fix the restart after an update. (#4869)1.1.790
* 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.
Diffstat (limited to 'src')
-rw-r--r--src/Ryujinx.Ava/Modules/Updater/Updater.cs42
-rw-r--r--src/Ryujinx/Modules/Updater/UpdateDialog.cs15
2 files changed, 45 insertions, 12 deletions
diff --git a/src/Ryujinx.Ava/Modules/Updater/Updater.cs b/src/Ryujinx.Ava/Modules/Updater/Updater.cs
index 05429935..77d77d79 100644
--- a/src/Ryujinx.Ava/Modules/Updater/Updater.cs
+++ b/src/Ryujinx.Ava/Modules/Updater/Updater.cs
@@ -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);
}
}
diff --git a/src/Ryujinx/Modules/Updater/UpdateDialog.cs b/src/Ryujinx/Modules/Updater/UpdateDialog.cs
index 4957b681..e0a257fd 100644
--- a/src/Ryujinx/Modules/Updater/UpdateDialog.cs
+++ b/src/Ryujinx/Modules/Updater/UpdateDialog.cs
@@ -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);
}