NanUI 启动器 Bootstrap 的设置

Bootstrap 类是初始化 NanUI 以及 Chromium Embedded 框架运行环境的主要入口。

通常将 Bootstrap 放置到应用程序的入口函数 Main() 中,该类必须先通过 Initialize() 方法来告知 NanUI 进入初始化流程,并且实例化 Bootstrap。Initialize()方法返回 Bootstrap 实例。此处约定,所有 Bootstrap 实例的内置方法以及可能出现的其他扩展方法(例如 AssemblyResourceHandler 的初始化方法)都必须返回该 Bootstrap 实例,以此来构建 FluentAPI 样式的编写风格。

Bootstrap 实例以 Run() 方法结束,并需要提供 Func<Formium|Form|ApplicationContext> 泛型作为其唯一参数,作用是为应用程序指定启动应用程序的主窗体,由它来代替 Application.Run() 方法。因此,您在 Main()方法中无需再次执行 Application.Run(mainform)方法。

Bootstrap 类

命名空间: NetDimension.NanUI

程序集: NetDimension.NanUI.dll

静态成员

  • CEF_VERSION type:const string | 指示当前框架的 Cef 版本
  • CommandLineArgs type:string[] | 当前进程的命令行参数

静态属性

  • ApplicationDataDirectory { get; } type:string | 获取应用程序的数据目录,应用数据目录用于存放 NanUI 相关的数据。通常该目录位于%appdata%Net Dimension Studio中。
  • CacheDirectory { get; } type:string | 获取应用程序 Chromium 的缓存目录,缓存目录用于存放 Chromium 的零时数据,包含了浏览记录、Cookies 数据、LocalStorage 数据等。通常该目录位于应用程序数据目录中。
  • CurrentContext { get; } type:Bootstrap 实例 | 获取当前 Bootstrap 的单例实例。应用程序初始化开始后才具备返回值;否则,返回 null。
  • DefaultBrowserSetting { get; } type:CfxBrowserSettings | Chromium 浏览器的默认设置,关于浏览器设置 CefBrowserSettings 的相关设置信息以及功能,请参考此文档。
  • LibCefDirPath { get; } type:string | 获取 libcef.dll 的路径。当 NanUI 自动搜索到 Cef 以及 ChromiumFX 的二进制依赖项时,此属性才具有返回值;否则返回 null,也代表 NanUI 没能找到正确的依赖项路径,启动应用程序后将抛出异常。
  • PlatformArchitecture { get; } type:enum[x86|x64] | 获取当前应用程序运行的系统架构
  • ResourceDirPath { get; } type:string | 获取 Cef 的 Resources 目录。Resources 目录包含了 Chromium 运行的必要文件,这些文件不可缺少。NanUI 会根据 LibCefDirPath 的值自动查找该目录并且验证目录文件,验证通过后此属性才具有返回值;否则返回 null,同样的启动应用程序后将抛出异常。
  • SubprocessPath { get; } type:string | 返回 NanUI 子进程可执行文件的路径。如果在 Bootstrap 初始化时指定了 UseDefaultBrowserSubpress() 特性,那么 NanUI 会自动搜索到 NanUI 子进程可执行文件时,此属性才具有返回值;否则返回 null,启动应用程序后将抛出异常。

静态方法

  • void Announce() 在控制台中打印 NanUI 的相关信息。这些信息在 NanUI 主进程启动时已自动打印。
  • int ExecuteProcess() 执行应用程序子进程。如果单独没有指定子进程或者没有指定UseDefaultBrowserSubpress() 特性,那么应用程序执行自己作为 Chromium 的子进程,否则将使用 Subprocess.exe 作为子进程。
  • Bootstrap Initialize() 通知 NanUI 开始初始化运行时环境,并返回 Bootstrap 类的实例。
  • void Log(params ColorToken[] tokens); 在控制台中打印日志,NanUI 的控制台打印模块使用了ColoredConsole库来实现控制台内容着色,有关信息请参考 ColoredConsole 项目。
  • void RegisterCustomResourceHandler(Func<CustomResource> resourceHandler); 注册自定义资源处理器。使用该方法可以注册任何 CustomResource 的派生类。资源处理器主要原理是通过拦截 Http 请求,当 Url 命中资源处理器中预设的 Url 时,返回指定的文件或信息。
  • void Text(string text) 在控制台中打印非重要信息。通常这些信息以黑底白字呈现。

实例方法

  • BeforeApplicaitonRun(Func<Bootstrap, bool> beforeRun); 设置一个在主窗体加载前的处理程序,参数传入当前 Bootstrap 实例,返回一个 Boolean 类型指示是否继续执行 Run()方法。
  • DisableHighDpiSupported() 禁用 Chromium 的 HighDPI 支持。默认情况下,NanUI 启用了 Chromium 的 HighDPI 支持,如果您的应用程序不是为新版 Windows 系统(例如 Windows 7)开发的,那么您需要显式地指定这一特性来避免 Chromium 跟随系统 DPI 缩放。
  • RegisterChromiumExtension(string name, Func<ChromiumExtensionBase> register) 为 Chromium 的 Javascript 环境注册扩展内容。参数name为该扩展的唯一名称,参数register是指定了返回值为ChromiumExtensionBase类型的代理,ChromiumExtensionBase是任何自定义扩展的基类。
  • UseDefaultBrowserSubpress() 指定使用 NanUI 默认的子进程应用程序。要使用此特性,您需要提前为您的应用程序安装 NanUI 子进程应用程序。
  • WhenLibCefNotFound(Action<LibCefNotFoundArgs> action) 设置 NanUI 没能自动找到 libcef.dll 依赖是的处理程序。参数LibCefNotFoundArgs包含了几个只读属性:Architecture - 只是当前应用运行的系统架构;ApplicationStartupPath - 应用程序的启动路径;DataPath - 应用程序的数据路径。在此代理中,您可以实现自己的路径查找逻辑,或者实现 Cef 依赖项目的远程下载等操作,最后,把您自定义的 Cef 依赖项存放地址反写到 LibCefDir 属性中,系统将再次检测您指定的路径,如果符合 NanUI 的运行要求,那么应用程序继续初始化工作;否则,将抛出异常。
  • WithApplicationDataDirectroty(string dataDir) 设置自定义的应用程序数据目录路径。
  • WithCustomLibCefDirPath(string libCefDirPath) 设置自定义的 Cef 依赖项存放目录路径。
  • WithDebugModeEnabled() 开启调试模式。默认情况下 NanUI 的调试模式是关闭的,非调试模式下 NanUI 禁用了某些非必要日志的输出,处了编辑菜单项外,移除了 Chromium 的其他上下文菜单。
  • WithChromiumCommandLineArguments(Action<string, CfxCommandLine> buildAction); 自定义 Chromium 的命令行参数,代理方法的第一个参数是 processType,第二个参数是命令行参数的快捷设置器。有关于 Chromium 的命令行参数,请参考此文档。
  • WithChromiumSettings(Action<CfxSettings> buildAction) 自定义 Chromium 的各项参数。代理方法的第一个参数为 Chromium 设置的快捷设置器。有关于 Chromium 设置的相关参数,请参考此文档。
  • void Run(Func<Formium|Form|ApplicationContext> runAction) 初始化 NanUI 并运行应用程序主窗体。执行本方法意味着 NanUI 运行环境初始化完成。您只能执行本方法一次,多次执行本方法将抛出异常。

示例

static void Main()
{Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);// 在此处执行IO操作或者单例检测操作,有可能导致应用程序执行异常。Bootstrap.Initialize().WithChromiumCommandLineArguments((procesName, cmd)=> {// 在此处处理CEF的命令行参数// Process the command line arguments here which are used to config the CEF processes。}).WithChromiumSettings(settings=> {// 在此处处理CEF的设置// Handle CEF settings here})//.UseDefaultBrowserSubpress().WhenLibCefNotFound(args => {// 如果NanUI启动器没有检测到正确的CEF以及ChromiumFX运行环境,将执行此处理过程。// This process handler will be performed if the NanUI bootstrapper does not detect correct CEF & ChromiumFX runtime enviroment.MessageBox.Show("没有检测到Chromium Embedded运行环境,请确认libcef环境配置正确。", "libcef.dll is not found", MessageBoxButtons.OK, MessageBoxIcon.Error);// 在此过程中,你可以自己实现检测逻辑(当然高端一点的做法,可以在此实现动态下载的功能)。指定返回LibCefDir参数,启动器会再次检测指定的位置是否符合运行条件,如果符合程序将继续执行,否则将抛出异常。// You can implement the detection logic yourself here. Of course, a high-end approach, you can implement a function to download the cef & cfx from your own server and deploy to any place you like. Specify the return parameter LibCefDir, the bootstrapper will check whether the specified location meets the running conditions again, if it matches, the program will continue to execute, otherwise it will throw an exception.//args.LibCefDir = ""}).Run(() =>{// 需要返回一个HostWindow的实例作为主要的启动窗口// Need to return a instance of HostWindow as the main window of the application.return new MainWindow();});
}

可能遇到的问题

特别提示: 不建议您在 Main 方法中执行其他操作,鉴于 Chromium 的多进程模型,Bootstrap 类初始化代码之前的其他代码将被执行多次。

例如您执行了下面的代码,那么将会出现至少 3 个以上的窗体。

var form = new Form();Bootstrap.Initialize().Run(()=> ...);

又比如您如果添加了应用程序单例检测代码禁止了多个进程启动,那么将造成应用程序无法启动渲染进程从而导致窗体无内容显示。

如果您一定要实现应用程序的单例执行,请确保使用 UseDefaultBrowserSubpress 特性,并且将单例检测的逻辑放到 Run()方法的的代理中执行。

mediarecorder路径设置为localsocket_[基础教程]-04 NanUI 启动器 Bootstrap 的设置相关推荐

  1. ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询

    ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询 属性 字段的添加.删除和查找 IFeatureLayer GetLayerByName(string name) {ILaye ...

  2. html帮助文件导入天正,天正建筑基础教程:天正建筑导入导出设置

    天正建筑软件是一款利用AutoCAD图形平台开发的最新一代建筑软件,关于天正建筑基础教程你们掌握多少呢?下面是小编整理的关于天正建筑导入导出设置的基础教程,希望对你们有帮助! 天正建筑导入导出设置 针 ...

  3. 计算机硬件 系统安装维护教程 04系统安装-Win-03:OOBE设置

    文章目录 OOBE设置 OOBE设置(Win 7) OOBE设置(Win 8 / 8.1) OOBE设置(Win 10) OOBE设置 OOBE设置(Win 7) 本OOBE是基于个人优化的系统,下载 ...

  4. 设置最小值_AI基础教程62:使用文字菜单编辑文字(四)标点挤压设置

    上一篇教程,我们讲了AI的避头尾法则设置,主要用于避免有些标点出现在行首或者行尾.这一篇教程,我们继续来看下一个设置内容:标点挤压设置. 当我们进行大量的文字排版时,段落文本中经常会出现由于标点符号等 ...

  5. GStreamer基础教程04 - 动态连接Pipeline

    摘要 在以前的文章中,我们了解到了2种播放文件的方式:一种是在知道了文件的类型及编码方式后,手动创建所需Element并构造Pipeline:另一种是直接使用playbin,由playbin内部动态创 ...

  6. Android基础教程之-------Android中两种设置全屏的方法!!!

    在开发中我们经常需要把我们的应用设置为全屏,这里我所知道的有俩中方法,一中是在代码中设置,另一种方法是在配置文件里改! 一.在代码中设置: view plaincopy to clipboardpri ...

  7. AE基础教程第一阶段——18首选项设置

    首选项设置 首选项(快捷键ctrl+alt+:) 编辑--首选项--常规 如果我们画一条线 调整常规里的值可以看到线两边的圆圈变大,不过这个一般不改 一般都要勾选上 预览 显示 导入 导入素材的时候, ...

  8. python语言入门p-python入门基础教程04 Python程序基本组成

    Python程序基本组成 Python和其他高级语言一样,几乎都是首先从某些地方接收一些数据(如键盘或文件或者赋值),接着对数据进行必要的处理,之后把处理的结果传到某个地方去(输出到文件.数据库或者打 ...

  9. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-1 获取和设置系统时间

    使用功能块NT_GetTime,NETID填写两个单引号表示本机,START就是一个触发信号,一般的功能块都需要一个上升沿触发执行,最后的输出类型都是让系统自己决定,然后统一把这些变量放到全局变量中( ...

最新文章

  1. JVM内存状况查看方法和分析工具
  2. 频率分布直方图组距如何确定_吃透教材理解教参,《直方图》教学反思
  3. html 调用main方法,ipcmain和ipcrenderer从index.html调用main.js函数
  4. Ansible script模块使用示例
  5. android管理员和普通用户登录,asp登录页如何区别管理员和普通用户,登录后跳转到不同页面?...
  6. [高性能javascript笔记]1-加载和执行
  7. 蓝桥杯 ALGO-85 算法训练 进制转换
  8. 交易记录表设计注意点
  9. 程序员:时间就是最好的创意
  10. base64原理(附代码) 换表脚本
  11. 微商推广引流秘笈—— 8 个高效的引流策略
  12. 2022 极术通讯-基于安谋科技 “星辰” STAR-MC1的灵动MM32F2570开发板深度评测
  13. P1526 [NOI2003] 智破连环阵 题解
  14. Netflow、Netstream、sflow
  15. 高等数学Mathematica实验题——2.2 - 17.根号2的连分式展开(Expansion of square 2)
  16. 【布局优化】基于粒子群求解物流选址matlab源码
  17. Date: 7 Dec, Saturday 佳能交流空间
  18. Google Pixel手机解锁 bootloader
  19. MySQL攻略 -DAO和增删改查通用方法-BasicDAO的认知与实现、案例练习
  20. 当中国AI开始远洋,我们能从百度海外输入法的巴展大秀上学到什么?

热门文章

  1. 程序清单3-1 测试能否对标准输入设置偏移量
  2. 《城市建筑美学》读书笔记
  3. sqlite-常用语句
  4. QT的系统总结(非常全面)
  5. C++中局部变量可以和全局变量重名吗?
  6. python地图 两点距离_没学过还真不会!怎样才能画出准确的地图?
  7. Android虚拟机和Java虚拟机的区别
  8. 引导页 设置只显示一次
  9. 网众linux安装教程,网众Linux搭建Samba教程
  10. Qt 中pro文件换行注意的问题