Program.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Autofac.Extensions.DependencyInjection;
  2. using Masuit.MyBlogs.Core;
  3. using Masuit.MyBlogs.Core.Common;
  4. using Masuit.MyBlogs.Core.Extensions.DriveHelpers;
  5. using Masuit.MyBlogs.Core.Infrastructure;
  6. using Masuit.MyBlogs.Core.Infrastructure.Drive;
  7. using Masuit.Tools;
  8. using Microsoft.AspNetCore.Server.Kestrel.Core;
  9. using System.Diagnostics;
  10. AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
  11. if (Environment.OSVersion.Platform is not (PlatformID.MacOSX or PlatformID.Unix))
  12. {
  13. // 设置相关进程优先级为高于正常,防止其他进程影响应用程序的运行性能
  14. Process.GetProcessesByName("mysqld").ForEach(p => p.PriorityClass = ProcessPriorityClass.AboveNormal);
  15. Process.GetProcessesByName("pg_ctl").ForEach(p => p.PriorityClass = ProcessPriorityClass.AboveNormal);
  16. Process.GetProcessesByName("postgres").ForEach(p => p.PriorityClass = ProcessPriorityClass.AboveNormal);
  17. Process.GetProcessesByName("redis-server").ForEach(p => p.PriorityClass = ProcessPriorityClass.AboveNormal);
  18. Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.AboveNormal;
  19. }
  20. // 确保IP数据库正常
  21. if (!"223.5.5.5".GetIPLocation().Contains("阿里"))
  22. {
  23. throw new Exception("IP地址库初始化失败,请重启应用!");
  24. }
  25. InitOneDrive(); // 初始化Onedrive程序
  26. Host.CreateDefaultBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureWebHostDefaults(hostBuilder => hostBuilder.UseKestrel(opt =>
  27. {
  28. var config = opt.ApplicationServices.GetService<IConfiguration>();
  29. var port = config["Port"] ?? "5000";
  30. var sslport = config["Https:Port"] ?? "5001";
  31. opt.ListenAnyIP(port.ToInt32());
  32. if (bool.Parse(config["Https:Enabled"]))
  33. {
  34. opt.ListenAnyIP(sslport.ToInt32(), s =>
  35. {
  36. if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 10)
  37. {
  38. s.Protocols = HttpProtocols.Http1AndHttp2;
  39. }
  40. s.UseHttps(AppContext.BaseDirectory + config["Https:CertPath"], config["Https:CertPassword"]);
  41. });
  42. }
  43. opt.Limits.MaxRequestBodySize = null;
  44. Console.WriteLine($"应用程序监听端口:http:{port},https:{sslport}");
  45. }).UseStartup<Startup>()).Build().Run();
  46. static void InitOneDrive()
  47. {
  48. //初始化
  49. if (!File.Exists(Path.Combine(Directory.GetCurrentDirectory(), "App_Data", "OneDrive.db")))
  50. {
  51. File.Copy(Path.Combine("App_Data","OneDrive.template.db"), Path.Combine("App_Data","OneDrive.db"));
  52. Console.WriteLine("数据库创建成功");
  53. }
  54. using var settingService = new SettingService(new DriveContext());
  55. if (settingService.Get("IsInit") != "true")
  56. {
  57. settingService.Set("IsInit", "true").Wait();
  58. Console.WriteLine("数据初始化成功");
  59. Console.WriteLine($"请登录 {OneDriveConfiguration.BaseUri}/#/admin 进行身份及其他配置");
  60. }
  61. }