mediarecorder路径设置为localsocket_[基础教程]-04 NanUI 启动器 Bootstrap 的设置
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 的设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 Python 中的常见的几种字符串替
- 下一篇: C语言 数组倒序输出数字「建议收藏」