public static void Start()
        {
            ChoApplicationHost host = ChoApplication.Host;

            if (host != null)
            {
                host.OnStartService(null);
            }
        }
 /// <summary>
 /// This class should be created and passed into Application.Run( ... )
 /// </summary>
 public ChoApplicationContext(ChoApplicationHost appHost)
 {
     ChoGuard.ArgumentNotNull(appHost, "ApplicationHost");
     _appHost   = appHost;
     _mainForm  = appHost.GetMainWindowObject();
     _hasWindow = appHost.IsWindowApp;
     BuildDefaultContextMenu();
     this._components = new System.ComponentModel.Container();
     this.NotifyIcon  = new ChoNotifyIcon(this._components);
     PreInitializeContext(appHost);
     ChoApplication.RaiseAfterNotifyIconConstructed(NotifyIcon);
     InitializeContext(appHost);
     _defaultTrayTipMsg = "{0} is running...".FormatString(ChoGlobalApplicationSettings.Me.ApplicationName);
 }
Exemple #3
0
        public static void Run <T>(string[] args)
            where T : ChoApplicationHost
        {
            if (_applicationHost != null)
            {
                return;
            }

            lock (_hostLock)
            {
                if (_applicationHost == null)
                {
                    _applicationHost      = Activator.CreateInstance <T>();
                    _applicationHost.Args = args;
                    ChoApplicationHost.IsApplicationHostUsed = true;

                    ChoFramework.Initialize();
                    ChoService.Initialize();
                }
            }
        }
Exemple #4
0
        public static void Run(ChoApplicationHost host, string[] args)
        {
            ChoGuard.ArgumentNotNull(host, "Host");

            if (_applicationHost != null)
            {
                return;
            }

            lock (_hostLock)
            {
                if (_applicationHost == null)
                {
                    _applicationHost      = host;
                    _applicationHost.Args = args;
                    ChoApplicationHost.IsApplicationHostUsed = true;

                    ChoFramework.Initialize();
                    ChoService.Initialize();
                }
            }
        }
        private void PreInitializeContext(ChoApplicationHost appHost)
        {
            if (appHost != null)
            {
                //if (ChoFrameworkCmdLineArgs.GetApplicationMode() != null
                //    && ChoFrameworkCmdLineArgs.GetApplicationMode().Value == ChoApplicationMode.Console
                if (ChoApplication.ApplicationMode == ChoApplicationMode.Console &&
                    !ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn
                    /*&& _mainForm != null */)
                {
                    _mainForm = null;
                    //ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn = false;
                    return;
                }

                if (!ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.DisableDefaultDoubleClickEvent)
                {
                    this.NotifyIcon.DoubleClick += new System.EventHandler(this.notifyIcon_DoubleClick);
                }
                if (!ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.DisableDefaultClickEvent)
                {
                    this.NotifyIcon.Click += new System.EventHandler(this.notifyIcon_Click);
                }

                //System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                System.Windows.Forms.Application.ThreadException += new ThreadExceptionEventHandler(ChoApplication.Application_ThreadException);
                if (_mainForm is Form)
                {
                    ChoApplication.WindowsAppType = ChoWindowsAppType.WinForms;
                    this._mainFormWindow          = (Form)_mainForm;
                }
                else if (_mainForm is Window)
                {
                    ChoApplication.WindowsAppType = ChoWindowsAppType.WPF;
                    this._mainWPFWindow           = (Window)_mainForm;

                    //System.Windows.Application app = appHost.ApplicationObject as System.Windows.Application;
                    //if (app == null)
                    //    app = new ChoWPFDefaultApplication();

                    //app.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(ChoApplication.Current_DispatcherUnhandledException);
                    //app.Run(_mainWPFWindow);
                }
                //else
                //    throw new ApplicationException("MainWindow object is not a valid object. Must be either Form or Window type.");
            }

            //this.NotifyIcon.DoubleClick += new System.EventHandler(this.notifyIcon_DoubleClick);

            //this.NotifyIcon.Icon = windowApp != null ? windowApp.TrayIcon : null;
            if (this.NotifyIcon.Icon == null)
            {
                Assembly entryAssembly = ChoAssembly.GetEntryAssembly();
                if (entryAssembly != null)
                {
                    this.NotifyIcon.Icon = Icon.ExtractAssociatedIcon(entryAssembly.Location);
                }
            }

            //this.NotifyIcon.Text = windowApp != null ? (windowApp.TooltipText.IsNullOrWhiteSpace() ? ChoGlobalApplicationSettings.Me.ApplicationName : windowApp.TooltipText) : ChoGlobalApplicationSettings.Me.ApplicationName;
            if (this.NotifyIcon.Text.IsNullOrWhiteSpace())
            {
                this.NotifyIcon.Text = ChoGlobalApplicationSettings.Me.ApplicationName;
            }

            if (this.NotifyIcon.BalloonTipText.IsNullOrWhiteSpace())
            {
                this.NotifyIcon.BalloonTipText = _defaultTrayTipMsg;
            }

            if (this.NotifyIcon.ContextMenu == null)
            {
                this.NotifyIcon.ContextMenuStrip = _defaultContextMenu;
            }
        }
        /// <summary>
        /// Create the NotifyIcon UI, the ContextMenu for the NotifyIcon and an Exit menu item.
        /// </summary>
        private void InitializeContext(ChoApplicationHost appHost)
        {
            //if (!_hasWindow)
            //    ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn = true;

            //if (appHost != null)
            //{
            //    //if (ChoFrameworkCmdLineArgs.GetApplicationMode() != null
            //    //    && ChoFrameworkCmdLineArgs.GetApplicationMode().Value == ChoApplicationMode.Console
            //    if (ChoApplication.ApplicationMode == ChoApplicationMode.Console
            //        && !ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn
            //        /*&& _mainForm != null */)
            //    {
            //        _mainForm = null;
            //        //ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn = false;
            //        return;
            //    }

            //    this.NotifyIcon.DoubleClick += new System.EventHandler(this.notifyIcon_DoubleClick);
            //    //System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            //    System.Windows.Forms.Application.ThreadException += new ThreadExceptionEventHandler(ChoApplication.Application_ThreadException);
            //    if (_mainForm is Form)
            //    {
            //        ChoApplication.WindowsAppType = ChoWindowsAppType.WinForms;
            //        this._mainFormWindow = (Form)_mainForm;
            //    }
            //    else if (_mainForm is Window)
            //    {
            //        ChoApplication.WindowsAppType = ChoWindowsAppType.WPF;
            //        this._mainWPFWindow = (Window)_mainForm;

            //        //System.Windows.Application app = appHost.ApplicationObject as System.Windows.Application;
            //        //if (app == null)
            //        //    app = new ChoWPFDefaultApplication();

            //        //app.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(ChoApplication.Current_DispatcherUnhandledException);
            //        //app.Run(_mainWPFWindow);
            //    }
            //    //else
            //    //    throw new ApplicationException("MainWindow object is not a valid object. Must be either Form or Window type.");
            //}

            ////this.NotifyIcon.DoubleClick += new System.EventHandler(this.notifyIcon_DoubleClick);

            ////this.NotifyIcon.Icon = windowApp != null ? windowApp.TrayIcon : null;
            //if (this.NotifyIcon.Icon == null)
            //{
            //    Assembly entryAssembly = ChoAssembly.GetEntryAssembly();
            //    if (entryAssembly != null)
            //        this.NotifyIcon.Icon = Icon.ExtractAssociatedIcon(entryAssembly.Location);
            //}

            ////this.NotifyIcon.Text = windowApp != null ? (windowApp.TooltipText.IsNullOrWhiteSpace() ? ChoGlobalApplicationSettings.Me.ApplicationName : windowApp.TooltipText) : ChoGlobalApplicationSettings.Me.ApplicationName;
            //if (this.NotifyIcon.Text.IsNullOrWhiteSpace())
            //    this.NotifyIcon.Text = ChoGlobalApplicationSettings.Me.ApplicationName;

            //if (this.NotifyIcon.BalloonTipText.IsNullOrWhiteSpace())
            //    this.NotifyIcon.BalloonTipText = _defaultTrayTipMsg;

            //if (this.NotifyIcon.ContextMenu == null)
            //{
            //    this.NotifyIcon.ContextMenuStrip = _defaultContextMenu;
            //}
            //this.NotifyIcon.Visible = ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn;

            if (this._mainFormWindow != null)
            {
                _mainFormWindow.Show();
                ChoWindowsManager.HideConsoleWindow();
                ChoWindowsManager.MainWindowHandle = this._mainFormWindow.Handle;
                _mainFormWindow.Closed            += new EventHandler(mainForm_Closed);
                _mainFormWindow.Closing           += new System.ComponentModel.CancelEventHandler(mainForm_Closing);
                _mainFormWindow.Resize            += new EventHandler(mainForm_Resize);
            }
            else if (this._mainWPFWindow != null)
            {
                System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(_mainWPFWindow);
                if (_appHost.WinApp == null)
                {
                    //_appHost.WinApp = ChoWPFDefaultApplication.Default;
                    //_appHost.WinApp.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(ChoApplication.Current_DispatcherUnhandledException);

                    _mainWPFWindow.Show();
                }
                ChoWindowsManager.HideConsoleWindow();
                WindowInteropHelper windowInteropHelper = new WindowInteropHelper(_mainWPFWindow);
                ChoWindowsManager.MainWindowHandle = windowInteropHelper.Handle;
                _mainWPFWindow.SourceInitialized  += mainWPFWindow_SourceInitialized;
                _mainWPFWindow.StateChanged       += new EventHandler(mainWPFWindow_StateChanged);
                _mainWPFWindow.Closed  += new EventHandler(mainWPFWindow_Closed);
                _mainWPFWindow.Closing += new System.ComponentModel.CancelEventHandler(mainWPFWindow_Closing);
            }
            else
            {
                ChoWindowsManager.HideConsoleWindow();
            }

            if (ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn)
            {
                if (_appHost != null)
                {
                    if (ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.HideMainWindowAtStartup)
                    {
                        //this._showMainWndMenuItem.Checked = false;
                        _isMainWindowOpen = false;

                        ToggleShowContextMenuItem();
                    }
                }
            }
            else
            {
                if (_appHost != null)
                {
                    ShowMainWindow();
                }
            }

            ChoGlobalApplicationSettings.Me.ObjectChanged += new EventHandler(Me_ConfigChanged);

            Me_ConfigChanged(null, null);
            if (ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.TurnOn)
            {
                if (ChoGlobalApplicationSettings.Me.TrayApplicationBehaviourSettings.HideMainWindowAtStartup)
                {
                    HideMainWindow();
                }
                else
                {
                    //HideMainWindow();
                    //ShowMainWindow();
                }
            }
        }
        public ChoApplicationHost()
        {
            Instance = this;
            //if (ChoApplication.ApplicationMode == ChoApplicationMode.NA)
            //if (!ChoApplication.IsInitialized)
            //{
            if (!ChoApplication.InternalEventsSubscriped)
            {
                ChoApplication.InternalEventsSubscriped = true;
                ChoApplication.ApplyGlobalApplicationSettingsOverridesInternal += ((sender, e) =>
                {
                    ChoServiceCommandLineArgs.OverrideFrxParams(e.Value);
                    ApplyGlobalApplicationSettingsOverrides(e.Value);
                }
                                                                                   );
                ChoApplication.AfterAppFrxSettingsLoadedInternal += ((sender, e) =>
                {
                    if (e.Value is ChoServiceInstallerSettings)
                    {
                        ChoServiceInstallerSettings o = (ChoServiceInstallerSettings)e.Value;
                        o.BeforeInstall(() => BeforeInstall());
                        o.AfterInstall(() => AfterInstall());
                        o.BeforeUninstall(() => BeforeUninstall());
                        o.AfterUninstall(() => AfterUninstall());
                    }

                    AfterAppFrxSettingsLoaded(e.Value);
                }
                                                                     );
                ChoApplication.ApplyMetaDataFilePathSettingsOverridesInternal += ((sender, e) =>
                {
                    ApplyMetaDataFilePathSettingsOverrides(e.Value);
                }
                                                                                  );
                ChoApplication.AfterNotifyIconConstructedInternal += ((sender, e) =>
                {
                    AfterNotifyIconConstructed(e.Value);
                }
                                                                      );
            }
            //ChoApplication.ApplyFrxParamsOverridesInternal += ((sender, e) =>
            //{
            //    ApplyFrxParamsOverrides(e.GlobalApplicationSettings, e.MetaDataFilePathSettings);

            //    if (_initialized) return;
            //    _initialized = true;

            //    ChoServiceCommandLineArgs.OverrideFrxParams(e);
            //});

            if (Environment.UserInteractive)
            {
                if (this.GetMainWindowObject() != null)
                {
                    if (ChoApplication.ApplicationMode == ChoApplicationMode.NA)
                    {
                        if (GetMainWindowObject() is Window ||
                            GetMainWindowObject() is Form)
                        {
                            ChoApplication.ApplicationMode = ChoApplicationMode.Windows;
                            if (GetMainWindowObject() is Window)
                            {
                                ChoApplication.WindowsAppType = ChoWindowsAppType.WPF;
                            }
                            else
                            {
                                ChoApplication.WindowsAppType = ChoWindowsAppType.WinForms;
                            }
                        }
                        else
                        {
                            ChoApplication.ApplicationMode = ChoApplicationMode.Console;
                        }
                    }
                    //if (!(this is IChoWindowApp))
                    //    throw new ChoApplicationException("ApplicationHost must derive from IChoWindowApp for Windows application.");
                }

                //ChoApplicationMode? applicationMode = ChoFrameworkCmdLineArgs.GetApplicationMode();
                //if (applicationMode != null)
                //    ChoApplication.ApplicationMode = applicationMode.Value;

                if (ChoApplication.ApplicationMode == ChoApplicationMode.Windows)
                {
                    //if (ChoApplication.WindowsAppType == ChoWindowsAppType.NA)
                    //    ChoApplication.ApplicationMode = ChoApplicationMode.Console;
                }
            }


            ChoApplication.FatalApplicationException += FatalApplicationException;

            //if (Environment.UserInteractive)
            //{
            //    if (!ChoServiceCommandLineArgs.HasServiceParams())
            //    {
            //        if (ChoApplication.ApplicationMode == ChoApplicationMode.Windows)
            //        {
            //            if (!ChoAppFrxSettings.Me.DoNotShowEnvSelectionWnd)
            //            {
            //                ChoChooseEnvironmentFrm.Show();
            //                //frm1 = new ChoChooseEnvironmentFrm();
            //                //if (frm1.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
            //                //    Environment.Exit(-101);
            //            }
            //        }
            //    }
            //}
            //}
            //else
            //    ApplyFrxParamsOverrides(ChoGlobalApplicationSettings.Me, ChoMetaDataFilePathSettings.Me);

            //ChoApplication.Initialize();
            ChoGlobalApplicationSettings x = ChoGlobalApplicationSettings.Me;

            ChoApplication.WriteToEventLog(ChoServiceInstallerSettings.Me.ToString());
        }