private static void Main([NotNull] string[] args) { Logger.Info($"TV Rename {Helpers.DisplayVersion} started with args: {string.Join(" ", args)}"); Logger.Info($"Copyright (C) {DateTime.Now.Year} TV Rename"); Logger.Info("This program comes with ABSOLUTELY NO WARRANTY; This is free software, and you are welcome to redistribute it under certain conditions"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler; if (args.Contains("/?", StringComparer.OrdinalIgnoreCase)) { Logger.Info(CommandLineArgs.Helptext()); //redirect console output to parent process //must be before any calls to Console.WriteLine() //MS: Never got this to work quite right - seems there is no simple way to output //to the command line console if you are a winforms app if (NativeMethods.AttachParentConsole()) { Console.WriteLine(CommandLineArgs.Helptext()); } else { Logger.Info("Could not attach to console"); } return; } // Check if an application instance is already running Mutex mutex = new Mutex(true, "TVRename", out bool newInstance); if (!newInstance) { // Already running Logger.Warn("An instance is already running"); // Create an IPC channel to the existing instance RemoteClient.Proxy(); // Transparent proxy to the existing instance RemoteClient ipc = new RemoteClient(); // If already running and no command line arguments then bring instance to the foreground and quit if (args.Length == 0) { ipc.FocusWindow(); } else { Logger.Warn($"Sending {string.Join(" ", args)} to the running instance."); ipc.SendArgs(args); } return; } try { Logger.Info("Starting new instance"); ApplicationBase s = new ApplicationBase(); s.Run(args); GC.KeepAlive(mutex); } catch (TVRenameOperationInterruptedException) { Logger.Fatal("USER REQUESTED End: Application exiting with error"); Environment.Exit(1); } catch (Exception ex) { Logger.Fatal(ex, "Application exiting with error"); new ShowException(ex).ShowDialog(); Environment.Exit(1); } Logger.Info("Application exiting"); }