using CefSharp; using CefSharp.Wpf; using FISLib; using FISSDKDemoV2.Manager; using FISSDKDemoV2.Model.GC; using FISSDKDemoV2.Model.Log; using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Windows; using System.Windows.Threading; namespace FISSDKDemoV2 { /// /// App.xaml 的交互逻辑 /// public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { CheckedOpenRepeatedly(); var rootPath = "D:"; if (!Directory.Exists(rootPath)) { rootPath = Path.GetPathRoot(AppDomain.CurrentDomain.BaseDirectory); } var fisLogPath = Path.Combine(rootPath, "FISLogFolder"); Logger.RegisterEngine(new DefaultLogEngine(fisLogPath)); GCLogger.RegisterEngine(new GCLogEngine(fisLogPath)); GcAdapter.Instance.RegisterForFullGCNotification(99, 99); AppDomain.CurrentDomain.UnhandledException += OnDomainOnUnhandledException; Current.DispatcherUnhandledException += OnDispatcherUnhandledException; InitCefSharp(); base.OnStartup(e); } private void InitCefSharp() { try { var settings = new CefSettings { Locale = "zh-CN", LogSeverity = LogSeverity.Disable, IgnoreCertificateErrors = true, BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CefSharp", "x64", "CefSharp.BrowserSubprocess.exe"), }; //允许媒体自动播放,而无需用户交互。 settings.CefCommandLineArgs.Add("autoplay-policy", "no-user-gesture-required"); //启用打印预览功能 settings.CefCommandLineArgs.Add("--enable-print-preview", "1"); //允许使用媒体流(例如麦克风和摄像头)。 settings.CefCommandLineArgs.Add("enable-media-stream", "1"); //允许屏幕捕捉,这通常用于屏幕共享或录制。 settings.CefCommandLineArgs.Add("enable-usermedia-screen-capturing", "1"); //允许语音输入 settings.CefCommandLineArgs.Add("enable-speech-input", "1"); //禁用Web安全策略,允许跨源请求,但这可能会带来安全风险 settings.CefCommandLineArgs.Add("--disable-web-security", "1"); //允许HTTP屏幕捕获 settings.CefCommandLineArgs.Add("allow-http-screen-capture", "1"); //自动选择桌面捕捉源为整个屏幕 settings.CefCommandLineArgs.Add("--auto-select-desktop-capture-source", "Entire screen"); //使用假的UI来请求媒体流(例如摄像头和麦克风),而不显示真实的权限请求对话框 settings.CefCommandLineArgs.Add("--use-fake-ui-for-media-stream", "1"); //启用专有编解码器,这可以支持更多的视频格式 settings.CefCommandLineArgs.Add("proprietary_codecs", "1"); //启用剪贴板访问 settings.CefCommandLineArgs.Add("--enable-clipboard", "1"); //使用Chrome版本的FFmpeg,这可以支持更多的媒体格式 settings.CefCommandLineArgs.Add("ffmpeg_branding", "Chrome"); // 允许CEF访问剪贴板 settings.CefCommandLineArgs.Add("allow-cef-access-to-clipboard", "1"); //允许从文件访问文件,通常用于本地HTML页面可以读取其他本地文件。 settings.CefCommandLineArgs.Add("allow-file-access-from-files", "1"); settings.CefCommandLineArgs.Add("unsafely-treat-insecure-origin-as-secure", "http://192.168.6.103:8081,http://192.168.6.62:8081,http://192.168.6.71:8081,http://192.168.6.117:8081"); //CefSharpSettings.LegacyJavascriptBindingEnabled = true; CefSharpSettings.ShutdownOnExit = false; #if DEBUG settings.RemoteDebuggingPort = 8088; #endif Cef.Initialize(settings); } catch (Exception ex) { Logger.WriteLineError($"CefInit Error:{ex}"); PageManager.Instance.ShowMessageBoxInMainWindow(FISDeviceLogCategory.Error, $"CefInit Error:{ex}"); } } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { Logger.WriteLineError($"OnDispatcherUnhandledException:{e.Exception}"); e.Handled = true; PageManager.Instance.ShowMessageBoxInMainWindow(FISDeviceLogCategory.Error, $"OnDispatcherUnhandledException{e.Exception}"); } private void OnDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs e) { Logger.WriteLineError($"OnDomainOnUnhandledException:{e.ExceptionObject}"); PageManager.Instance.ShowMessageBoxInMainWindow(FISDeviceLogCategory.Error, $"OnDomainOnUnhandledException:{e.ExceptionObject}"); } /// /// 判断是否重复打开 /// private void CheckedOpenRepeatedly() { var thisProcess = Process.GetCurrentProcess(); if (Process.GetProcessesByName(thisProcess.ProcessName).Where(x => x.ProcessName == thisProcess.ProcessName).Count() > 1) { PageManager.Instance.ShowMessageBoxInMainWindow(FISDeviceLogCategory.Warn, $"已有相同程序正在运行中,此程序即将退出。"); thisProcess.Kill(); } } } }