using System; using System.IO; 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) { Boolean reUse = Array.IndexOf(arguments, "-reuse") > -1; if (!MultiInstanceMode || 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; MainForm mainForm = new MainForm(); Application.Run(mainForm); } } /// /// Run FlashDevelop and catch any unhandled exceptions. /// static void RunFlashDevelopWithErrorHandling(String[] arguments, Boolean isFirst) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm.IsFirst = isFirst; MainForm.Arguments = arguments; MainForm mainForm = new MainForm(); SingleInstanceApp.NewInstanceMessage += delegate(Object sender, Object 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 Boolean MultiInstanceMode { get { String file = Path.Combine(PathHelper.AppDir, ".multi"); return File.Exists(file); } } } }