Program.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using DevExpress.Pdf.Xmp;
  2. using DevExpress.Utils.Localization;
  3. using Ips.Library;
  4. using Ips.Library.Basic;
  5. using Ips.Library.DxpLib;
  6. using Ips.Library.Entity;
  7. using Serilog;
  8. using System.IO;
  9. using System.Reflection;
  10. using System.Runtime.Loader;
  11. using System.Text.Json.Serialization;
  12. namespace Ips.Service.GpuServer
  13. {
  14. internal static class Program
  15. {
  16. static Program()
  17. {
  18. //设置私有路径(NetCore移除了这种方式,因此使用Resolving事件)
  19. //AppDomain.CurrentDomain.SetData("PRIVATE_BINPATH", "AddIns;");
  20. //var m = typeof(AppDomainSetup).GetMethod("UpdateContextProperty", BindingFlags.NonPublic | BindingFlags.Static);
  21. //var funsion = typeof(AppDomain).GetMethod("GetFusionContext", BindingFlags.NonPublic | BindingFlags.Instance);
  22. //m.Invoke(null, new object[] { funsion.Invoke(AppDomain.CurrentDomain, null), "PRIVATE_BINPATH", "AddIns;" });
  23. AssemblyLoadContext.Default.Resolving += Default_Resolving;
  24. Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
  25. //c++dll加入环境变量
  26. string paths = Environment.GetEnvironmentVariable("PATH");
  27. if (Directory.Exists("AddIns"))
  28. {
  29. var dirs = Directory.EnumerateDirectories("AddIns", "*", SearchOption.AllDirectories);
  30. List<string> list = new List<string>
  31. {
  32. Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AddIns")
  33. };
  34. foreach (var item in dirs)
  35. {
  36. list.Add(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, item));
  37. }
  38. Environment.SetEnvironmentVariable("PATH", $"{paths};{string.Join(";", list)}");
  39. }
  40. AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
  41. {
  42. var args = e.ExceptionObject as Exception;
  43. IpsLogger.Error("出现未处理的异常,程序即将退出!", args);
  44. Thread.Sleep(5000);
  45. };
  46. Application.ThreadException += (sender, e) =>
  47. {
  48. if (e.Exception.GetType() != typeof(TaskCanceledException))
  49. IpsLogger.Error("出现未处理的线程异常!", e.Exception);
  50. };
  51. }
  52. /// <summary>
  53. /// The main entry point for the application.
  54. /// </summary>
  55. [STAThread]
  56. static void Main()
  57. {
  58. //必须要用一个委托包装一下,否则发布后运行不会显示UI,我也不知道为啥
  59. AppHelper.OneStart("GPU服务",() =>
  60. {
  61. ChsLocalizer.UseChs();
  62. ApplicationConfiguration.Initialize();
  63. Application.Run(new DirectXForm1());
  64. });
  65. }
  66. private static Assembly Default_Resolving(AssemblyLoadContext alc, AssemblyName assemblyName)
  67. {
  68. string pathMaybe = Path.Combine(AppContext.BaseDirectory, "AddIns", $"{assemblyName.Name}.dll");
  69. if (File.Exists(pathMaybe))
  70. return alc.LoadFromAssemblyPath(pathMaybe);
  71. return null;
  72. }
  73. }
  74. }