diff --git a/lib/main.dart b/lib/main.dart index d28659e..651d438 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,17 +12,32 @@ import 'ui/app_tray.dart'; /// 资安信插件助手(desktop-plugin):桌面插件集成软件。 /// 当前内置插件:饭卡打印机(card-printer);左侧菜单与插件页均由 lib/ui/routes.dart 驱动。 /// 关闭窗口 = 最小化到后台托盘,服务持续运行;退出入口在托盘菜单。 +/// +/// 健壮性铁律:runApp 之前的任何非关键步骤(托盘/scheme 注册/单实例)一律 +/// try-catch 吞错并记日志——否则在目标机环境差异下抛异常会让界面永远起不来 +/// (窗口由原生创建、Dart 未 runApp = 白屏窗口),开发机上无法复现。 Future main(List args) async { WidgetsFlutterBinding.ensureInitialized(); - await windowManager.ensureInitialized(); + + String? bootWarning; + try { + await windowManager.ensureInitialized(); + } catch (e) { + bootWarning = '窗口管理初始化失败:$e'; + } // 单实例:zaxprint:// 唤起或重复双击会启动第二进程——通知常驻实例弹窗后自己退出 - final isPrimary = await SingleInstance.acquire( - onWake: () async { - await windowManager.show(); - await windowManager.focus(); - }, - ); + bool isPrimary = true; + try { + isPrimary = await SingleInstance.acquire( + onWake: () async { + await windowManager.show(); + await windowManager.focus(); + }, + ); + } catch (e) { + bootWarning = '${bootWarning == null ? "" : "$bootWarning\n"}单实例检测失败:$e'; + } if (!isPrimary) { exit(0); } @@ -35,12 +50,20 @@ Future main(List args) async { startError = '$e'; } - await UrlScheme.ensureRegistered(); // Windows 运行时注册 zaxprint://;mac 由 Info.plist 声明 + try { + await UrlScheme.ensureRegistered(); // Windows 运行时注册 zaxprint://;mac 由 Info.plist 声明 + } catch (e) { + agent.log.write('网页唤起协议注册失败(不影响其他功能):$e'); + } final appTray = AppTray(agent: agent); - await appTray.start(); + try { + await appTray.start(); + } catch (e) { + agent.log.write('托盘初始化失败(不影响其他功能):$e'); + } - runApp(DesktopPluginApp(agent: agent, startError: startError)); + runApp(DesktopPluginApp(agent: agent, startError: startError ?? bootWarning)); } class DesktopPluginApp extends StatelessWidget {