Exemplo n.º 1
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Directory.SetCurrentDirectory(Path.GetDirectoryName(Utils.Utils.GetExecutablePath()));
            var identifier = $@"Global\{nameof(TCPingInfoView)}_{Directory.GetCurrentDirectory().GetDeterministicHashCode()}";

            var singleInstance = new SingleInstance.SingleInstance(identifier);

            if (!singleInstance.IsFirstInstance)
            {
                singleInstance.PassArgumentsToFirstInstance(e.Args.Append(Constants.ParameterShow));
                Current.Shutdown();
                return;
            }

            singleInstance.ArgumentsReceived.Subscribe(SingleInstance_ArgumentsReceived);
            singleInstance.ListenForArgumentsFromSuccessiveInstances();

            Current.Events().Exit.Subscribe(args =>
            {
                singleInstance.Dispose();
                Log.CloseAndFlush();
            });
            Current.Events().DispatcherUnhandledException.Subscribe(args =>
            {
                try
                {
                    if (Interlocked.Increment(ref _exited) != 1)
                    {
                        return;
                    }

                    var exStr = $@"未捕获异常:{args.Exception}";

                    Log.Fatal(args.Exception, @"未捕获异常");
                    MessageBox.Show(exStr, nameof(TCPingInfoView), MessageBoxButton.OK, MessageBoxImage.Error);

                    Current.Shutdown();
                }
                finally
                {
                    singleInstance.Dispose();
                    Log.CloseAndFlush();
                }
            });

            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(@"##SyncfusionLicense##");

            Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly());

            var serviceCollection = new ServiceCollection();

            ConfigureServices(serviceCollection);

            ServiceProvider = serviceCollection.BuildServiceProvider();

            MainWindow = ServiceProvider.GetRequiredService <MainWindow>();
            MainWindow.ShowWindow();
        }
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Directory.SetCurrentDirectory(Path.GetDirectoryName(Utils.Utils.GetExecutablePath()) !);
            var identifier = $@"Global\{nameof(BilibiliLiveRecordDownLoader)}";

            var singleInstance = new SingleInstance.SingleInstance(identifier);

            if (!singleInstance.IsFirstInstance)
            {
                singleInstance.PassArgumentsToFirstInstance(e.Args.Append(Constants.ParameterShow));
                Current.Shutdown();
                return;
            }

            singleInstance.ArgumentsReceived.ObserveOnDispatcher().Subscribe(SingleInstance_ArgumentsReceived);
            singleInstance.ListenForArgumentsFromSuccessiveInstances();

            Current.Events().Exit.Subscribe(_ =>
            {
                singleInstance.Dispose();
                Log.CloseAndFlush();
            });
            Current.Events().DispatcherUnhandledException.Subscribe(args =>
            {
                try
                {
                    if (Interlocked.Increment(ref _exited) != 1)
                    {
                        return;
                    }

                    var exStr = $@"未捕获异常:{args.Exception}";

                    Log.Fatal(args.Exception, @"未捕获异常");
                    MessageBox.Show(exStr, nameof(BilibiliLiveRecordDownLoader), MessageBoxButton.OK, MessageBoxImage.Error);

                    Current.Shutdown();
                }
                finally
                {
                    singleInstance.Dispose();
                    Log.CloseAndFlush();
                }
            });

            ThemeManager.Current.ApplicationTheme = null;

            Register();

            MainWindow = Locator.Current.GetService <MainWindow>();
            MainWindow.ShowWindow();
        }
        public App()
        {
            try
            {
#if DEBUG
                var identifier = $@"Global\{nameof(BilibiliLiveRecordDownLoader)}_Debug";
#else
                var identifier = $@"Global\{nameof(BilibiliLiveRecordDownLoader)}";
#endif
                _singleInstance = new(identifier);
                DI.CreateLogger();
            }
            catch (Exception ex)
            {
                MessageBox.Show($@"WTF??? {ex}", nameof(BilibiliLiveRecordDownLoader), MessageBoxButton.OK, MessageBoxImage.Error);
                Environment.Exit(1);
            }
        }
        public App()
        {
            try
            {
#if DEBUG
                var identifier = $@"Global\{nameof(BilibiliLiveRecordDownLoader)}_Debug";
#else
                var identifier = $@"Global\{nameof(BilibiliLiveRecordDownLoader)}";
#endif
                _singleInstance = new(identifier);

                Directory.SetCurrentDirectory(Path.GetDirectoryName(Utils.Utils.GetExecutablePath()) !);

                DI.CreateLogger();
            }
            catch (Exception ex)
            {
                MessageBox.Show($@"WTF??? {ex}", nameof(BilibiliLiveRecordDownLoader), MessageBoxButton.OK, MessageBoxImage.Error);
                Environment.Exit(1);
            }
        }
Exemplo n.º 5
0
        private static void Main(string[] args)
        {
            Directory.SetCurrentDirectory(Path.GetDirectoryName(Utils.GetExecutablePath()) ?? throw new InvalidOperationException());
            var identifier = $@"Global\{Controller.HttpRequest.UpdateChecker.Name}_{Directory.GetCurrentDirectory().GetDeterministicHashCode()}";

            using var singleInstance = new SingleInstance.SingleInstance(identifier);
            if (!singleInstance.IsFirstInstance)
            {
                singleInstance.PassArgumentsToFirstInstance(args.Length == 0
                        ? args.Append(Constants.ParameterMultiplyInstance)
                        : args);
                return;
            }
            singleInstance.ArgumentsReceived.Subscribe(SingleInstance_ArgumentsReceived);

            var app = new Application
            {
                ShutdownMode = ShutdownMode.OnExplicitShutdown
            };

            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
            app.Exit += App_Exit;

            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(@"##SyncfusionLicense##");

            Global.LoadConfig();

            I18NUtil.SetLanguage(Global.GuiConfig.LangName);
            ViewUtils.SetResource(app.Resources, @"../View/NotifyIconResources.xaml", 1);

            Global.Controller = new MainController();

            // Logging
            Logging.DefaultOut   = Console.Out;
            Logging.DefaultError = Console.Error;

            Utils.SetTls();

            Global.ViewController       = new MenuViewController(Global.Controller);
            SystemEvents.SessionEnding += Global.ViewController.Quit_Click;

            Global.Controller.Reload();
            if (Global.GuiConfig.IsDefaultConfig())
            {
                var res = MessageBox.Show(
                    $@"{I18NUtil.GetAppStringValue(@"DefaultConfigMessage")}{Environment.NewLine}{I18NUtil.GetAppStringValue(@"DefaultConfigQuestion")}",
                    Controller.HttpRequest.UpdateChecker.Name, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.OK);
                switch (res)
                {
                case MessageBoxResult.Yes:
                {
                    Global.Controller.ShowConfigForm();
                    break;
                }

                case MessageBoxResult.No:
                {
                    Global.Controller.ShowSubscribeWindow();
                    break;
                }

                default:
                {
                    StopController();
                    return;
                }
                }
            }

            Reg.SetUrlProtocol(@"ssr");
            Reg.SetUrlProtocol(@"sub");

            singleInstance.ListenForArgumentsFromSuccessiveInstances();
            app.Run();
        }