using System; using System.IO; using System.Linq; using System.Windows.Forms; using PluginCore; using PluginCore.Helpers; using PluginCore.Utilities; namespace FlashDevelop { static class Program { [STAThread] static void Main(string[] arguments) { if (Win32.ShouldUseWin32()) { if (SingleInstanceApp.AlreadyExists) { if (!MultiInstanceMode || arguments.Contains("-reuse")) SingleInstanceApp.NotifyExistingInstance(arguments); else RunFlashDevelopWithErrorHandling(arguments, false); } else RunFlashDevelopWithErrorHandling(arguments, true); } else // For other platforms { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm.IsFirst = true; MainForm.Arguments = arguments; Application.Run(new MainForm()); } } /// /// Run FlashDevelop and catch any unhandled exceptions. /// static void RunFlashDevelopWithErrorHandling(string[] arguments, bool isFirst) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm.IsFirst = isFirst; MainForm.Arguments = arguments; var mainForm = new MainForm(); SingleInstanceApp.NewInstanceMessage += (_, message) => { MainForm.Arguments = message as string[]; mainForm.ProcessParameters(message as string[]); }; try { SingleInstanceApp.Initialize(); Application.Run(mainForm); } catch (Exception ex) { MessageBox.Show("There was an unexpected problem while running FlashDevelop: " + ex.Message, "Error"); } finally { SingleInstanceApp.Close(); } } /// /// Checks if we should run in multi instance mode. /// public static bool MultiInstanceMode => File.Exists(Path.Combine(PathHelper.AppDir, ".multi")); } }