コード例 #1
0
ファイル: Runtime.cs プロジェクト: d8q8/NanUI
        internal int InitializeProcessOnly()
        {
            var args = Environment.GetCommandLineArgs();

            if (ProcessType == CefProcessType.Browser)
            {
                Logger.Error("This process is just only run as subprocess.");

                return(-1);
            }

            CefRuntime.Load(ChromiumEnvironment.LibCefDir);

            IsRuntimeInitialized = true;

            if (!ChromiumEnvironment.ForceHighDpiSupportDisabled)
            {
                CefRuntime.EnableHighDpiSupport();
            }

            ChromiumEnvironment.CefBrowserSettingConfigurations?.Invoke(WinFormium.DefaultBrowserSettings);

            ApplicationConfiguration.UseExtensions[(int)ExtensionExecutePosition.SubProcessStartup]?.Invoke(this, ApplicationProperties);

            var cefMainArgs = new CefMainArgs(args);

            var app = new WinFormiumApp();

            var exitCode = CefRuntime.ExecuteProcess(cefMainArgs, app, IntPtr.Zero);

            return(exitCode);
        }
コード例 #2
0
ファイル: Runtime.cs プロジェクト: d8q8/NanUI
        internal int Initialize()
        {
            var args = Environment.GetCommandLineArgs();


            if (ProcessType == CefProcessType.Browser)
            {
                var currentProcess = Process.GetCurrentProcess();



                ApplicationConfiguration.UseExtensions[(int)ExtensionExecutePosition.MainProcessStartup]?.Invoke(this, ApplicationProperties);
            }

            CefRuntime.Load(ChromiumEnvironment.LibCefDir);

            IsRuntimeInitialized = true;

            if (ProcessType == CefProcessType.Browser)
            {
                var info = $@"
Welcome to NanUI/0.8 Dev ({WinFormium.PlatformArchitecture}); Chromium/{CefRuntime.ChromeVersion}; WinFormium/{Assembly.GetExecutingAssembly().GetName().Version};
Copyrights (C) 2015-{DateTime.Now.Year} NetDimension Studio all rights reserved. Powered by Xuanchen Lin. 
{NanUI.Properties.Resources.ASCII_NanUI_Logo}
This project is under LGPL-3.0 License.
https://github.com/NetDimension/NanUI/blob/master/LICENCE
";

                Logger.Info(info);
            }


            if (!ChromiumEnvironment.ForceHighDpiSupportDisabled)
            {
                CefRuntime.EnableHighDpiSupport();
            }

            ChromiumEnvironment.CefBrowserSettingConfigurations?.Invoke(WinFormium.DefaultBrowserSettings);

            ApplicationConfiguration.UseExtensions[(int)ExtensionExecutePosition.SubProcessStartup]?.Invoke(this, ApplicationProperties);

            var cefMainArgs = new CefMainArgs(args);

            var app = new WinFormiumApp();

            var exitCode = CefRuntime.ExecuteProcess(cefMainArgs, app, IntPtr.Zero);

            Logger.Info(string.Format("CefRuntime.ExecuteProcess() returns {0}", exitCode));



            if (exitCode != -1)
            {
                return(exitCode);
            }

            foreach (var arg in args)
            {
                if (arg.StartsWith("--type="))
                {
                    return(-2);
                }
            }

            RegisterCustomResourceHandler(new ResourceHandler.InternalResource.InternalSchemeConfiguration());



            var settings = new CefSettings
            {
                LogSeverity        = CefLogSeverity.Warning,
                ResourcesDirPath   = ChromiumEnvironment.LibCefResourceDir,
                LocalesDirPath     = ChromiumEnvironment.LibCefLocaleDir,
                Locale             = Thread.CurrentThread.CurrentCulture.ToString(),
                AcceptLanguageList = Thread.CurrentThread.CurrentCulture.ToString(),
                JavaScriptFlags    = "--expose-gc",
                CachePath          = WinFormium.DefaultAppDataDirectory,
            };

            settings.LogFile = Path.Combine(settings.CachePath, "debug.log");

            ChromiumEnvironment.SettingConfigurations?.Invoke(settings);

            settings.MultiThreadedMessageLoop = true;

            settings.NoSandbox = true;

            if (!string.IsNullOrEmpty(ChromiumEnvironment.SubprocessPath))
            {
                settings.BrowserSubprocessPath = ChromiumEnvironment.SubprocessPath;
            }


            CefRuntime.Initialize(new CefMainArgs(args), settings, app, IntPtr.Zero);

            ApplicationConfiguration.UseExtensions[(int)ExtensionExecutePosition.Initialized]?.Invoke(this, ApplicationProperties);

            foreach (var config in CustomResourceHandlerConfigurations)
            {
                config.OnResourceHandlerRegister();

                if (!CefRuntime.RegisterSchemeHandlerFactory(config.Scheme, config.DomainName, config))
                {
                    throw new InvalidOperationException("ResouceHandler is fail to be registered");
                }
            }

            var context = GetAppContext();

            if (context == null)
            {
                context = ApplicationConfiguration.UseApplicationContext?.Invoke();

                if (context != null)
                {
                    context.ThreadExit += (_, args) =>
                    {
                        Application.Exit();
                    };
                }
            }

            if (context != null)
            {
                Application.Run(context);

                return(0);
            }


            Environment.Exit(-1);

            return(-1);
        }