using System.Diagnostics; using System.IO.Compression; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.UI.Xaml; using Microsoft.Windows.AppLifecycle; using Newtonsoft.Json; using RustTools.Activation; using RustTools.Contracts.Services; using RustTools.DataList; using RustTools.Helpers; using RustTools.Models; using RustTools.muqing; using RustTools.Services; using RustTools.ViewModels; using RustTools.Views; using RustTools.WindowUI; using Windows.ApplicationModel.Activation; using Windows.Storage; namespace RustTools; // To learn more about WinUI 3, see https://docs.microsoft.com/windows/apps/winui/winui3/. public partial class App : Microsoft.UI.Xaml.Application { // The .NET Generic Host provides dependency injection, configuration, logging, and other services. // https://docs.microsoft.com/dotnet/core/extensions/generic-host // https://docs.microsoft.com/dotnet/core/extensions/dependency-injection // https://docs.microsoft.com/dotnet/core/extensions/configuration // https://docs.microsoft.com/dotnet/core/extensions/logging public IHost Host { get; } public static T GetService() where T : class { if ((App.Current as App)!.Host.Services.GetService(typeof(T)) is not T service) { throw new ArgumentException($"{typeof(T)} needs to be registered in ConfigureServices within App.xaml.cs."); } return service; } public static UIElement? AppTitlebar { get; set; } public static WindowEx? MainWindow; public App() { InitializeComponent(); // 注册激活事件处理程序 Host = Microsoft.Extensions.Hosting.Host. CreateDefaultBuilder(). UseContentRoot(AppContext.BaseDirectory). ConfigureServices((context, services) => { // Default Activation Handler services.AddTransient, DefaultActivationHandler>(); // Other Activation Handlers // Services services.AddSingleton(); services.AddSingleton(); services.AddTransient(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // Core Services services.AddSingleton(); // Views and ViewModels services.AddTransient(); services.AddTransient(); services.AddTransient(); //services.AddTransient(); services.AddTransient(); //services.AddTransient(); services.AddTransient(); //services.AddTransient(); services.AddTransient(); //services.AddTransient(); //模组碎片 services.AddTransient(); //services.AddTransient(); services.AddTransient(); //services.AddTransient(); services.AddTransient(); services.AddTransient(); // Configuration services.Configure(context.Configuration.GetSection(nameof(LocalSettingsOptions))); }). Build(); UnhandledException += App_UnhandledException; //获取当前路径 //Debug.WriteLine(); try { var DataBaseManifest = Path.Combine(AppContext.BaseDirectory, "Assets\\CodeTable\\RustCode"); var iniHelper = new IniHelper(IniHelper.FILE.Config); var v1 = iniHelper.GetValue("CodeTable", "Dir"); if (string.IsNullOrEmpty(v1)||!wj.cz(Path.Combine(v1," DataBaseManifest.json"))) { v1 = DataBaseManifest; iniHelper.SetValue("CodeTable", "Dir", v1); iniHelper.Save(); } var vr = Path.Combine(v1, "DataBaseManifest.json"); if (File.Exists(vr)) { var json = JsonConvert.DeserializeObject(File.ReadAllText(vr)); json.Dir = v1; CodeDataPage.codetable = json; } } catch (Exception e) { Debug.WriteLine(e); } } private void App_UnhandledException(object sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs e) { // TODO: Log and handle exceptions as appropriate. // https://docs.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.application.unhandledexception. } protected async override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) { base.OnLaunched(args); var activatedEventArgs = Microsoft.Windows.AppLifecycle.AppInstance.GetCurrent().GetActivatedEventArgs(); if (activatedEventArgs.Kind == Microsoft.Windows.AppLifecycle.ExtendedActivationKind.File) { gj.sc("打开文件"); if (activatedEventArgs.Kind == ExtendedActivationKind.File) { if (activatedEventArgs.Data is IFileActivatedEventArgs fileArgs) { var files = fileArgs.Files; // 处理打开的文件 foreach (var file in files) { var storageFile = file as Windows.Storage.StorageFile; if (storageFile != null) { gj.sc(storageFile.Path); var importModule = new ImportModule(storageFile.Path); importModule.Activate(); // 读取或处理文件内容 } } } } return; } var mainInstance = Microsoft.Windows.AppLifecycle.AppInstance.FindOrRegisterForKey("main"); if (!mainInstance.IsCurrent) { await mainInstance.RedirectActivationToAsync(activatedEventArgs); System.Diagnostics.Process.GetCurrentProcess().Kill(); return; } else { //new Editor.EditorWin().Activate(); MainWindow = new MainWindow(); await App.GetService().ActivateAsync(args); } } }