misc: Some fixes to the updaters (#4092)
This was meant to be only an upgrade of how we set unix permission in the updater to use .NET 7 new APIs, but I end up finding bugs along the way. Changelog: - Remove direct usage of chmod to use File.SetUnixFileMode. - Fix command line being broken when updating (#3744) but on Ryujinx.Ava. - Makes Ryujinx.Ava updater fallback to Ryujinx executable if current name isn't found. - Make permission setter function more generic.
This commit is contained in:
parent
475fa4d390
commit
6fe88115a3
2 changed files with 28 additions and 20 deletions
|
@ -11,6 +11,7 @@ using Ryujinx.Ava.Ui.Controls;
|
||||||
using Ryujinx.Ava.Ui.Windows;
|
using Ryujinx.Ava.Ui.Windows;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
|
using Ryujinx.Ui.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
@ -278,14 +279,15 @@ namespace Ryujinx.Modules
|
||||||
{
|
{
|
||||||
string ryuName = Path.GetFileName(Environment.ProcessPath);
|
string ryuName = Path.GetFileName(Environment.ProcessPath);
|
||||||
string ryuExe = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ryuName);
|
string ryuExe = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ryuName);
|
||||||
var ryuArg = Environment.GetCommandLineArgs().Skip(1);
|
|
||||||
|
|
||||||
if (!OperatingSystem.IsWindows())
|
if (!Path.Exists(ryuExe))
|
||||||
{
|
{
|
||||||
chmod(ryuExe, Convert.ToUInt32("0777", 8));
|
ryuExe = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx");
|
||||||
}
|
}
|
||||||
|
|
||||||
Process.Start(ryuExe, ryuArg);
|
SetFileExecutable(ryuExe);
|
||||||
|
|
||||||
|
Process.Start(ryuExe, CommandLineState.Arguments);
|
||||||
|
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
@ -456,16 +458,19 @@ namespace Ryujinx.Modules
|
||||||
worker.Start();
|
worker.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("libc", SetLastError = true)]
|
private static void SetFileExecutable(string path)
|
||||||
private static extern int chmod(string path, uint mode);
|
|
||||||
|
|
||||||
private static void SetUnixPermissions()
|
|
||||||
{
|
{
|
||||||
string ryuBin = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx");
|
const UnixFileMode ExecutableFileMode = UnixFileMode.UserExecute |
|
||||||
|
UnixFileMode.UserWrite |
|
||||||
|
UnixFileMode.UserRead |
|
||||||
|
UnixFileMode.GroupRead |
|
||||||
|
UnixFileMode.GroupWrite |
|
||||||
|
UnixFileMode.OtherRead |
|
||||||
|
UnixFileMode.OtherWrite;
|
||||||
|
|
||||||
if (!OperatingSystem.IsWindows())
|
if (!OperatingSystem.IsWindows() && File.Exists(path))
|
||||||
{
|
{
|
||||||
chmod(ryuBin, 493);
|
File.SetUnixFileMode(path, ExecutableFileMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -586,7 +591,7 @@ namespace Ryujinx.Modules
|
||||||
|
|
||||||
Directory.Delete(UpdateDir, true);
|
Directory.Delete(UpdateDir, true);
|
||||||
|
|
||||||
SetUnixPermissions();
|
SetFileExecutable(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx"));
|
||||||
|
|
||||||
UpdateSuccessful = true;
|
UpdateSuccessful = true;
|
||||||
|
|
||||||
|
|
|
@ -387,16 +387,19 @@ namespace Ryujinx.Modules
|
||||||
worker.Start();
|
worker.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("libc", SetLastError = true)]
|
private static void SetFileExecutable(string path)
|
||||||
private static extern int chmod(string path, uint mode);
|
|
||||||
|
|
||||||
private static void SetUnixPermissions()
|
|
||||||
{
|
{
|
||||||
string ryuBin = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx");
|
const UnixFileMode ExecutableFileMode = UnixFileMode.UserExecute |
|
||||||
|
UnixFileMode.UserWrite |
|
||||||
|
UnixFileMode.UserRead |
|
||||||
|
UnixFileMode.GroupRead |
|
||||||
|
UnixFileMode.GroupWrite |
|
||||||
|
UnixFileMode.OtherRead |
|
||||||
|
UnixFileMode.OtherWrite;
|
||||||
|
|
||||||
if (!OperatingSystem.IsWindows())
|
if (!OperatingSystem.IsWindows() && File.Exists(path))
|
||||||
{
|
{
|
||||||
chmod(ryuBin, 493);
|
File.SetUnixFileMode(path, ExecutableFileMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -519,7 +522,7 @@ namespace Ryujinx.Modules
|
||||||
|
|
||||||
Directory.Delete(UpdateDir, true);
|
Directory.Delete(UpdateDir, true);
|
||||||
|
|
||||||
SetUnixPermissions();
|
SetFileExecutable(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx"));
|
||||||
|
|
||||||
updateDialog.MainText.Text = "Update Complete!";
|
updateDialog.MainText.Text = "Update Complete!";
|
||||||
updateDialog.SecondaryText.Text = "Do you want to restart Ryujinx now?";
|
updateDialog.SecondaryText.Text = "Do you want to restart Ryujinx now?";
|
||||||
|
|
Reference in a new issue