using System.Windows; using System.Windows.Threading; using ytLive.Helpers; namespace ytLive; /// /// Interaction logic for App.xaml /// public partial class App : Application { public App() { AppLog.Write("App ctor"); } protected override void OnStartup(StartupEventArgs e) { AppDomain.CurrentDomain.UnhandledException += (_, args) => AppLog.Write(args.ExceptionObject is Exception ex ? "AppDomain unhandled exception: " + ex : "AppDomain unhandled exception object: " + args.ExceptionObject, AppLogMessageType.Error, AppLogErrorClass.Class1); DispatcherUnhandledException += (_, args) => AppLog.Write(args.Exception, "Dispatcher unhandled exception", AppLogErrorClass.Class1); AppLog.Write("App OnStartup begin"); // Attribution (2026-09-04): every take must be traceable to the exact binary // that produced it — the wordmark shows the release counter (BuildStamp.Release); // the per-build GUID is forensic only and lands here. AppLog.Write($"Build {ytLive.Helpers.BuildStamp.Id} (compiled {ytLive.Helpers.BuildStamp.BuiltLocal})"); // There is deliberately NO self-update bootstrap here: the Microsoft Store updates the // app (TASK 48 — Store MSIX route), and a second updater would fight it. base.OnStartup(e); AppLog.Write("App OnStartup end"); } }