mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-19 23:03:51 +02:00
Fix launch args
This commit is contained in:
@@ -18,7 +18,7 @@ namespace VRCX
|
||||
{
|
||||
internal class StartupArgs
|
||||
{
|
||||
public static VrcxLaunchArguements LaunchArguements = new();
|
||||
public static VrcxLaunchArguments LaunchArguments = new();
|
||||
|
||||
public static void ArgsCheck()
|
||||
{
|
||||
@@ -27,60 +27,57 @@ namespace VRCX
|
||||
Debug.Assert(Program.LaunchDebug = true);
|
||||
|
||||
var currentProcessArgs = ParseArgs(args);
|
||||
LaunchArguements = currentProcessArgs;
|
||||
LaunchArguments = currentProcessArgs;
|
||||
|
||||
if (LaunchArguements.IsDebug)
|
||||
if (LaunchArguments.IsDebug)
|
||||
Program.LaunchDebug = true;
|
||||
|
||||
if (LaunchArguements.ConfigDirectory != null)
|
||||
if (LaunchArguments.ConfigDirectory != null)
|
||||
{
|
||||
if (File.Exists(LaunchArguements.ConfigDirectory))
|
||||
if (File.Exists(LaunchArguments.ConfigDirectory))
|
||||
{
|
||||
MessageBox.Show("Move your \"VRCX.sqlite3\" into a folder then specify the folder in the launch parameter e.g.\n--config=\"C:\\VRCX\\\"", "--config is now a directory", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
Program.AppDataDirectory = LaunchArguements.ConfigDirectory;
|
||||
Program.AppDataDirectory = LaunchArguments.ConfigDirectory;
|
||||
}
|
||||
|
||||
var disableClosing = false;
|
||||
|
||||
if (LaunchArguements.IsUpgrade || // we're upgrading, allow it
|
||||
!string.IsNullOrEmpty(CommandLineArgsParser.GetArgumentValue(args, CefSharpArguments.SubProcessTypeArgument))) // we're launching a subprocess, allow it
|
||||
disableClosing = true;
|
||||
var disableClosing = LaunchArguments.IsUpgrade || // we're upgrading, allow it
|
||||
!string.IsNullOrEmpty(CommandLineArgsParser.GetArgumentValue(args, CefSharpArguments.SubProcessTypeArgument)); // we're launching a subprocess, allow it
|
||||
|
||||
// if we're launching a second instance with same config directory, focus the first instance then exit
|
||||
if (!disableClosing && IsDuplicateProcessRunning(LaunchArguements))
|
||||
if (!disableClosing && IsDuplicateProcessRunning(LaunchArguments))
|
||||
{
|
||||
IPCToMain();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
private static VrcxLaunchArguements ParseArgs(string[] args)
|
||||
private static VrcxLaunchArguments ParseArgs(string[] args)
|
||||
{
|
||||
VrcxLaunchArguements arguements = new VrcxLaunchArguements();
|
||||
var arguments = new VrcxLaunchArguments();
|
||||
foreach (var arg in args)
|
||||
{
|
||||
if (arg == VrcxLaunchArguements.IsUpgradePrefix)
|
||||
arguements.IsUpgrade = true;
|
||||
if (arg == VrcxLaunchArguments.IsUpgradePrefix)
|
||||
arguments.IsUpgrade = true;
|
||||
|
||||
if (arg.StartsWith(VrcxLaunchArguements.IsDebugPrefix))
|
||||
arguements.IsDebug = true;
|
||||
if (arg.StartsWith(VrcxLaunchArguments.IsDebugPrefix))
|
||||
arguments.IsDebug = true;
|
||||
|
||||
if (arg.StartsWith(VrcxLaunchArguements.LaunchCommandPrefix) && arg.Length > VrcxLaunchArguements.LaunchCommandPrefix.Length)
|
||||
arguements.LaunchCommand = arg.Substring(VrcxLaunchArguements.LaunchCommandPrefix.Length);
|
||||
if (arg.StartsWith(VrcxLaunchArguments.LaunchCommandPrefix) && arg.Length > VrcxLaunchArguments.LaunchCommandPrefix.Length)
|
||||
arguments.LaunchCommand = arg.Substring(VrcxLaunchArguments.LaunchCommandPrefix.Length);
|
||||
|
||||
if (arg.StartsWith(VrcxLaunchArguements.ConfigDirectoryPrefix) && arg.Length > VrcxLaunchArguements.ConfigDirectoryPrefix.Length)
|
||||
arguements.ConfigDirectory = arg.Substring(VrcxLaunchArguements.ConfigDirectoryPrefix.Length + 1);
|
||||
if (arg.StartsWith(VrcxLaunchArguments.ConfigDirectoryPrefix) && arg.Length > VrcxLaunchArguments.ConfigDirectoryPrefix.Length)
|
||||
arguments.ConfigDirectory = arg.Substring(VrcxLaunchArguments.ConfigDirectoryPrefix.Length + 1);
|
||||
|
||||
if (arg.StartsWith(VrcxLaunchArguements.ProxyUrlPrefix) && arg.Length > VrcxLaunchArguements.ProxyUrlPrefix.Length)
|
||||
arguements.ProxyUrl = arg.Substring(VrcxLaunchArguements.ProxyUrlPrefix.Length + 1).Replace("'", string.Empty).Replace("\"", string.Empty);
|
||||
if (arg.StartsWith(VrcxLaunchArguments.ProxyUrlPrefix) && arg.Length > VrcxLaunchArguments.ProxyUrlPrefix.Length)
|
||||
arguments.ProxyUrl = arg.Substring(VrcxLaunchArguments.ProxyUrlPrefix.Length + 1).Replace("'", string.Empty).Replace("\"", string.Empty);
|
||||
}
|
||||
return arguements;
|
||||
return arguments;
|
||||
}
|
||||
|
||||
internal class VrcxLaunchArguements
|
||||
internal class VrcxLaunchArguments
|
||||
{
|
||||
public const string IsUpgradePrefix = "/Upgrade";
|
||||
public bool IsUpgrade { get; set; } = false;
|
||||
@@ -98,7 +95,7 @@ namespace VRCX
|
||||
public string ProxyUrl { get; set; } = null;
|
||||
}
|
||||
|
||||
private static bool IsDuplicateProcessRunning(VrcxLaunchArguements launchArguements)
|
||||
private static bool IsDuplicateProcessRunning(VrcxLaunchArguments launchArguments)
|
||||
{
|
||||
var processes = Process.GetProcessesByName("VRCX")
|
||||
.Where(x => x.Id != Environment.ProcessId);
|
||||
@@ -109,26 +106,23 @@ namespace VRCX
|
||||
|
||||
try
|
||||
{
|
||||
using (var searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id))
|
||||
{
|
||||
using (var objects = searcher.Get())
|
||||
{
|
||||
commandLine = objects.Cast<ManagementBaseObject>().SingleOrDefault()?["CommandLine"]?.ToString() ?? string.Empty;
|
||||
}
|
||||
}
|
||||
using var searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id);
|
||||
using var objects = searcher.Get();
|
||||
commandLine =
|
||||
objects.Cast<ManagementBaseObject>().SingleOrDefault()?["CommandLine"]?.ToString() ??
|
||||
string.Empty;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
catch { }
|
||||
|
||||
if (commandLine.Contains(CefSharpArguments.SubProcessTypeArgument)) // ignore subprocesses
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var processArguements = ParseArgs(commandLine.Split(' '));
|
||||
if (processArguements.ConfigDirectory == launchArguements.ConfigDirectory)
|
||||
{
|
||||
var processArguments = ParseArgs(commandLine.Split(' '));
|
||||
if (processArguments.ConfigDirectory == launchArguments.ConfigDirectory)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -142,7 +136,7 @@ namespace VRCX
|
||||
|
||||
if (ipcClient.IsConnected)
|
||||
{
|
||||
var buffer = Encoding.UTF8.GetBytes($"{{\"type\":\"LaunchCommand\",\"command\":\"{LaunchArguements.LaunchCommand}\"}}" + (char)0x00);
|
||||
var buffer = Encoding.UTF8.GetBytes($"{{\"type\":\"LaunchCommand\",\"command\":\"{LaunchArguments.LaunchCommand}\"}}" + (char)0x00);
|
||||
ipcClient.BeginWrite(buffer, 0, buffer.Length, IPCClient.Close, ipcClient);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user