Program.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using System.Reflection;
  6. using System.Security.Principal;
  7. using System.Windows.Forms;
  8. namespace X2D1TaskServer
  9. {
  10. internal static class Program
  11. {
  12. static Program()
  13. {
  14. //设置私有路径
  15. Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
  16. AppDomain.CurrentDomain.SetData("PRIVATE_BINPATH", "AddIns;");
  17. var m = typeof(AppDomainSetup).GetMethod("UpdateContextProperty", BindingFlags.NonPublic | BindingFlags.Static);
  18. var funsion = typeof(AppDomain).GetMethod("GetFusionContext", BindingFlags.NonPublic | BindingFlags.Instance);
  19. m.Invoke(null, new object[] { funsion.Invoke(AppDomain.CurrentDomain, null), "PRIVATE_BINPATH", "AddIns;" });
  20. //c++dll加入环境变量
  21. string paths = Environment.GetEnvironmentVariable("PATH");
  22. var dirs = Directory.EnumerateDirectories("AddIns", "*", SearchOption.AllDirectories);
  23. List<string> list = new List<string>
  24. {
  25. Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AddIns")
  26. };
  27. foreach (var item in dirs)
  28. {
  29. list.Add(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, item));
  30. }
  31. Environment.SetEnvironmentVariable("PATH", $"{paths};{string.Join(";", list)}");
  32. AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
  33. {
  34. var args = e.ExceptionObject as Exception;
  35. XdCxRhDW.Framework.LogHelper.Error("出现未处理的异常,程序即将退出!", args);
  36. };
  37. Application.ThreadException += (sender, e) =>
  38. {
  39. XdCxRhDW.UI.Lib.LogUI.Error("出现未处理的线程异常!", e.Exception).Wait(5000);
  40. };
  41. }
  42. static bool IsRunningAsAdmin()
  43. {
  44. bool result;
  45. try
  46. {
  47. WindowsIdentity identity = WindowsIdentity.GetCurrent();
  48. WindowsPrincipal principal = new WindowsPrincipal(identity);
  49. result = principal.IsInRole(WindowsBuiltInRole.Administrator);
  50. }
  51. catch
  52. {
  53. result = false;
  54. }
  55. return result;
  56. }
  57. static void RestartAsAdmin()
  58. {
  59. var startInfo = new ProcessStartInfo();
  60. startInfo.FileName = Application.ExecutablePath;
  61. startInfo.Verb = "runas"; // 以管理员身份运行
  62. try
  63. {
  64. Process.Start(startInfo);
  65. }
  66. catch (System.ComponentModel.Win32Exception)
  67. {
  68. // 用户取消了管理员权限提示,或者其他错误
  69. // 可以在此处处理错误情况
  70. }
  71. Application.Exit();
  72. }
  73. /// <summary>
  74. /// 应用程序的主入口点。
  75. /// </summary>
  76. [STAThread]
  77. static void Main(string[] args)
  78. {
  79. if (IsRunningAsAdmin())
  80. {
  81. MainForm mainForm = new MainForm();
  82. System.Windows.Forms.Application.Run(mainForm);
  83. }
  84. else
  85. {
  86. RestartAsAdmin();
  87. }
  88. }
  89. }
  90. }