Program.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. IpsLogger.Error("出现未处理的线程异常!", e.Exception);
  49. };
  50. }
  51. /// <summary>
  52. /// The main entry point for the application.
  53. /// </summary>
  54. [STAThread]
  55. static void Main()
  56. {
  57. //必须要用一个委托包装一下,否则发布后运行不会显示UI,我也不知道为啥
  58. AppHelper.MultStart(() =>
  59. {
  60. ChsLocalizer.UseChs();
  61. ApplicationConfiguration.Initialize();
  62. Application.Run(new DirectXForm1());
  63. });
  64. }
  65. private static Assembly Default_Resolving(AssemblyLoadContext alc, AssemblyName assemblyName)
  66. {
  67. string pathMaybe = Path.Combine(AppContext.BaseDirectory, "AddIns", $"{assemblyName.Name}.dll");
  68. if (File.Exists(pathMaybe))
  69. return alc.LoadFromAssemblyPath(pathMaybe);
  70. return null;
  71. }
  72. }
  73. }