mediarecorder路径设置为localsocket_[基础教程]-04 NanUI 启动器 Bootstrap 的设置
NanUI 啟動(dòng)器 Bootstrap 的設(shè)置
Bootstrap 類是初始化 NanUI 以及 Chromium Embedded 框架運(yùn)行環(huán)境的主要入口。
通常將 Bootstrap 放置到應(yīng)用程序的入口函數(shù) Main() 中,該類必須先通過 Initialize() 方法來告知 NanUI 進(jìn)入初始化流程,并且實(shí)例化 Bootstrap。Initialize()方法返回 Bootstrap 實(shí)例。此處約定,所有 Bootstrap 實(shí)例的內(nèi)置方法以及可能出現(xiàn)的其他擴(kuò)展方法(例如 AssemblyResourceHandler 的初始化方法)都必須返回該 Bootstrap 實(shí)例,以此來構(gòu)建 FluentAPI 樣式的編寫風(fēng)格。
Bootstrap 實(shí)例以 Run() 方法結(jié)束,并需要提供 Func<Formium|Form|ApplicationContext> 泛型作為其唯一參數(shù),作用是為應(yīng)用程序指定啟動(dòng)應(yīng)用程序的主窗體,由它來代替 Application.Run() 方法。因此,您在 Main()方法中無需再次執(zhí)行 Application.Run(mainform)方法。
Bootstrap 類
命名空間: NetDimension.NanUI
程序集: NetDimension.NanUI.dll
靜態(tài)成員
- CEF_VERSION type:const string | 指示當(dāng)前框架的 Cef 版本
- CommandLineArgs type:string[] | 當(dāng)前進(jìn)程的命令行參數(shù)
靜態(tài)屬性
- ApplicationDataDirectory { get; } type:string | 獲取應(yīng)用程序的數(shù)據(jù)目錄,應(yīng)用數(shù)據(jù)目錄用于存放 NanUI 相關(guān)的數(shù)據(jù)。通常該目錄位于%appdata%Net Dimension Studio中。
- CacheDirectory { get; } type:string | 獲取應(yīng)用程序 Chromium 的緩存目錄,緩存目錄用于存放 Chromium 的零時(shí)數(shù)據(jù),包含了瀏覽記錄、Cookies 數(shù)據(jù)、LocalStorage 數(shù)據(jù)等。通常該目錄位于應(yīng)用程序數(shù)據(jù)目錄中。
- CurrentContext { get; } type:Bootstrap 實(shí)例 | 獲取當(dāng)前 Bootstrap 的單例實(shí)例。應(yīng)用程序初始化開始后才具備返回值;否則,返回 null。
- DefaultBrowserSetting { get; } type:CfxBrowserSettings | Chromium 瀏覽器的默認(rèn)設(shè)置,關(guān)于瀏覽器設(shè)置 CefBrowserSettings 的相關(guān)設(shè)置信息以及功能,請(qǐng)參考此文檔。
- LibCefDirPath { get; } type:string | 獲取 libcef.dll 的路徑。當(dāng) NanUI 自動(dòng)搜索到 Cef 以及 ChromiumFX 的二進(jìn)制依賴項(xiàng)時(shí),此屬性才具有返回值;否則返回 null,也代表 NanUI 沒能找到正確的依賴項(xiàng)路徑,啟動(dòng)應(yīng)用程序后將拋出異常。
- PlatformArchitecture { get; } type:enum[x86|x64] | 獲取當(dāng)前應(yīng)用程序運(yùn)行的系統(tǒng)架構(gòu)
- ResourceDirPath { get; } type:string | 獲取 Cef 的 Resources 目錄。Resources 目錄包含了 Chromium 運(yùn)行的必要文件,這些文件不可缺少。NanUI 會(huì)根據(jù) LibCefDirPath 的值自動(dòng)查找該目錄并且驗(yàn)證目錄文件,驗(yàn)證通過后此屬性才具有返回值;否則返回 null,同樣的啟動(dòng)應(yīng)用程序后將拋出異常。
- SubprocessPath { get; } type:string | 返回 NanUI 子進(jìn)程可執(zhí)行文件的路徑。如果在 Bootstrap 初始化時(shí)指定了 UseDefaultBrowserSubpress() 特性,那么 NanUI 會(huì)自動(dòng)搜索到 NanUI 子進(jìn)程可執(zhí)行文件時(shí),此屬性才具有返回值;否則返回 null,啟動(dòng)應(yīng)用程序后將拋出異常。
靜態(tài)方法
- void Announce() 在控制臺(tái)中打印 NanUI 的相關(guān)信息。這些信息在 NanUI 主進(jìn)程啟動(dòng)時(shí)已自動(dòng)打印。
- int ExecuteProcess() 執(zhí)行應(yīng)用程序子進(jìn)程。如果單獨(dú)沒有指定子進(jìn)程或者沒有指定UseDefaultBrowserSubpress() 特性,那么應(yīng)用程序執(zhí)行自己作為 Chromium 的子進(jìn)程,否則將使用 Subprocess.exe 作為子進(jìn)程。
- Bootstrap Initialize() 通知 NanUI 開始初始化運(yùn)行時(shí)環(huán)境,并返回 Bootstrap 類的實(shí)例。
- void Log(params ColorToken[] tokens); 在控制臺(tái)中打印日志,NanUI 的控制臺(tái)打印模塊使用了ColoredConsole庫(kù)來實(shí)現(xiàn)控制臺(tái)內(nèi)容著色,有關(guān)信息請(qǐng)參考 ColoredConsole 項(xiàng)目。
- void RegisterCustomResourceHandler(Func<CustomResource> resourceHandler); 注冊(cè)自定義資源處理器。使用該方法可以注冊(cè)任何 CustomResource 的派生類。資源處理器主要原理是通過攔截 Http 請(qǐng)求,當(dāng) Url 命中資源處理器中預(yù)設(shè)的 Url 時(shí),返回指定的文件或信息。
- void Text(string text) 在控制臺(tái)中打印非重要信息。通常這些信息以黑底白字呈現(xiàn)。
實(shí)例方法
- BeforeApplicaitonRun(Func<Bootstrap, bool> beforeRun); 設(shè)置一個(gè)在主窗體加載前的處理程序,參數(shù)傳入當(dāng)前 Bootstrap 實(shí)例,返回一個(gè) Boolean 類型指示是否繼續(xù)執(zhí)行 Run()方法。
- DisableHighDpiSupported() 禁用 Chromium 的 HighDPI 支持。默認(rèn)情況下,NanUI 啟用了 Chromium 的 HighDPI 支持,如果您的應(yīng)用程序不是為新版 Windows 系統(tǒng)(例如 Windows 7)開發(fā)的,那么您需要顯式地指定這一特性來避免 Chromium 跟隨系統(tǒng) DPI 縮放。
- RegisterChromiumExtension(string name, Func<ChromiumExtensionBase> register) 為 Chromium 的 Javascript 環(huán)境注冊(cè)擴(kuò)展內(nèi)容。參數(shù)name為該擴(kuò)展的唯一名稱,參數(shù)register是指定了返回值為ChromiumExtensionBase類型的代理,ChromiumExtensionBase是任何自定義擴(kuò)展的基類。
- UseDefaultBrowserSubpress() 指定使用 NanUI 默認(rèn)的子進(jìn)程應(yīng)用程序。要使用此特性,您需要提前為您的應(yīng)用程序安裝 NanUI 子進(jìn)程應(yīng)用程序。
- WhenLibCefNotFound(Action<LibCefNotFoundArgs> action) 設(shè)置 NanUI 沒能自動(dòng)找到 libcef.dll 依賴是的處理程序。參數(shù)LibCefNotFoundArgs包含了幾個(gè)只讀屬性:Architecture - 只是當(dāng)前應(yīng)用運(yùn)行的系統(tǒng)架構(gòu);ApplicationStartupPath - 應(yīng)用程序的啟動(dòng)路徑;DataPath - 應(yīng)用程序的數(shù)據(jù)路徑。在此代理中,您可以實(shí)現(xiàn)自己的路徑查找邏輯,或者實(shí)現(xiàn) Cef 依賴項(xiàng)目的遠(yuǎn)程下載等操作,最后,把您自定義的 Cef 依賴項(xiàng)存放地址反寫到 LibCefDir 屬性中,系統(tǒng)將再次檢測(cè)您指定的路徑,如果符合 NanUI 的運(yùn)行要求,那么應(yīng)用程序繼續(xù)初始化工作;否則,將拋出異常。
- WithApplicationDataDirectroty(string dataDir) 設(shè)置自定義的應(yīng)用程序數(shù)據(jù)目錄路徑。
- WithCustomLibCefDirPath(string libCefDirPath) 設(shè)置自定義的 Cef 依賴項(xiàng)存放目錄路徑。
- WithDebugModeEnabled() 開啟調(diào)試模式。默認(rèn)情況下 NanUI 的調(diào)試模式是關(guān)閉的,非調(diào)試模式下 NanUI 禁用了某些非必要日志的輸出,處了編輯菜單項(xiàng)外,移除了 Chromium 的其他上下文菜單。
- WithChromiumCommandLineArguments(Action<string, CfxCommandLine> buildAction); 自定義 Chromium 的命令行參數(shù),代理方法的第一個(gè)參數(shù)是 processType,第二個(gè)參數(shù)是命令行參數(shù)的快捷設(shè)置器。有關(guān)于 Chromium 的命令行參數(shù),請(qǐng)參考此文檔。
- WithChromiumSettings(Action<CfxSettings> buildAction) 自定義 Chromium 的各項(xiàng)參數(shù)。代理方法的第一個(gè)參數(shù)為 Chromium 設(shè)置的快捷設(shè)置器。有關(guān)于 Chromium 設(shè)置的相關(guān)參數(shù),請(qǐng)參考此文檔。
- void Run(Func<Formium|Form|ApplicationContext> runAction) 初始化 NanUI 并運(yùn)行應(yīng)用程序主窗體。執(zhí)行本方法意味著 NanUI 運(yùn)行環(huán)境初始化完成。您只能執(zhí)行本方法一次,多次執(zhí)行本方法將拋出異常。
示例
static void Main() {Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);// 在此處執(zhí)行IO操作或者單例檢測(cè)操作,有可能導(dǎo)致應(yīng)用程序執(zhí)行異常。Bootstrap.Initialize().WithChromiumCommandLineArguments((procesName, cmd)=> {// 在此處處理CEF的命令行參數(shù)// Process the command line arguments here which are used to config the CEF processes。}).WithChromiumSettings(settings=> {// 在此處處理CEF的設(shè)置// Handle CEF settings here})//.UseDefaultBrowserSubpress().WhenLibCefNotFound(args => {// 如果NanUI啟動(dòng)器沒有檢測(cè)到正確的CEF以及ChromiumFX運(yùn)行環(huán)境,將執(zhí)行此處理過程。// This process handler will be performed if the NanUI bootstrapper does not detect correct CEF & ChromiumFX runtime enviroment.MessageBox.Show("沒有檢測(cè)到Chromium Embedded運(yùn)行環(huán)境,請(qǐng)確認(rèn)libcef環(huán)境配置正確。", "libcef.dll is not found", MessageBoxButtons.OK, MessageBoxIcon.Error);// 在此過程中,你可以自己實(shí)現(xiàn)檢測(cè)邏輯(當(dāng)然高端一點(diǎn)的做法,可以在此實(shí)現(xiàn)動(dòng)態(tài)下載的功能)。指定返回LibCefDir參數(shù),啟動(dòng)器會(huì)再次檢測(cè)指定的位置是否符合運(yùn)行條件,如果符合程序?qū)⒗^續(xù)執(zhí)行,否則將拋出異常。// 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(() =>{// 需要返回一個(gè)HostWindow的實(shí)例作為主要的啟動(dòng)窗口// Need to return a instance of HostWindow as the main window of the application.return new MainWindow();}); }可能遇到的問題
特別提示: 不建議您在 Main 方法中執(zhí)行其他操作,鑒于 Chromium 的多進(jìn)程模型,Bootstrap 類初始化代碼之前的其他代碼將被執(zhí)行多次。
例如您執(zhí)行了下面的代碼,那么將會(huì)出現(xiàn)至少 3 個(gè)以上的窗體。
var form = new Form();Bootstrap.Initialize().Run(()=> ...);又比如您如果添加了應(yīng)用程序單例檢測(cè)代碼禁止了多個(gè)進(jìn)程啟動(dòng),那么將造成應(yīng)用程序無法啟動(dòng)渲染進(jìn)程從而導(dǎo)致窗體無內(nèi)容顯示。
如果您一定要實(shí)現(xiàn)應(yīng)用程序的單例執(zhí)行,請(qǐng)確保使用 UseDefaultBrowserSubpress 特性,并且將單例檢測(cè)的邏輯放到 Run()方法的的代理中執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的mediarecorder路径设置为localsocket_[基础教程]-04 NanUI 启动器 Bootstrap 的设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 Python 中的常见的几种字符串替
- 下一篇: C语言 数组倒序输出数字「建议收藏」