using System; using System.Diagnostics; using System.IO; using System.Windows.Forms; using ReClassNET; using ReClassNET.DataExchange.ReClass; using ReClassNET.Native; using ReClassNET.Util; namespace ReClassNET_Launcher { static class Program { [STAThread] static void Main(string[] args) { var commandLineArgs = new CommandLineArgs(args); // Register the files with the launcher. if (commandLineArgs[Constants.CommandLineOptions.FileExtRegister] != null) { NativeMethods.RegisterExtension(ReClassNetFile.FileExtension, ReClassNetFile.FileExtensionId, PathUtil.ExecutablePath, Constants.ApplicationName); return; } if (commandLineArgs[Constants.CommandLineOptions.FileExtUnregister] != null) { NativeMethods.UnregisterExtension(ReClassNetFile.FileExtension, ReClassNetFile.FileExtensionId); return; } var is64Bit = IntPtr.Size == 8; // If there is a file in the commandline, read the platform. if (commandLineArgs.FileName != null) { try { is64Bit = ReClassNetFile.ReadPlatform(commandLineArgs.FileName) == "x64"; } catch (Exception) { } } // And finally start the real ReClass.NET. var applicationPath = Path.Combine(PathUtil.ExecutableFolderPath, is64Bit ? "x64" : "x86", Constants.ApplicationExecutableName); try { var processStartInfo = new ProcessStartInfo { FileName = applicationPath, UseShellExecute = true, WindowStyle = ProcessWindowStyle.Normal }; var arguments = GetCommandLineWithoutExecutablePath(); if (arguments != null) { processStartInfo.Arguments = arguments; } Process.Start(processStartInfo); } catch (Exception) { MessageBox.Show($"Could not start '{applicationPath}'.", Constants.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// Gets command line without the executable path. /// If empty null else the command line parameters. private static string GetCommandLineWithoutExecutablePath() { var commandLine = Environment.CommandLine; if (string.IsNullOrEmpty(commandLine)) { return null; } var arguments = string.Empty; int argIndex; if (commandLine[0] == '"') { var secondDoublequoteIndex = -1; for (var i = 1; i < commandLine.Length; ++i) { if (commandLine[i] == '\\') { ++i; continue; } if (commandLine[i] == '"') { secondDoublequoteIndex = i + 1; break; } } argIndex = secondDoublequoteIndex; } else { argIndex = commandLine.IndexOf(" ", StringComparison.Ordinal); } if (argIndex != -1) { arguments = commandLine.Substring(argIndex + 1); } return arguments == string.Empty ? null : arguments; } } }