2
0

Program.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Microsoft.Win32;
  2. using System;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using System.Reflection;
  6. using System.Threading;
  7. using System.Windows;
  8. namespace FastGithub.UI
  9. {
  10. class Program
  11. {
  12. private const string MUTEX_NAME = "Global\\FastGithub.UI";
  13. private const string MAIN_WINDOWS = "MainWindow.xaml";
  14. private const string FASTGITHUB_PATH = "fastgithub.exe";
  15. [STAThread]
  16. static void Main(string[] args)
  17. {
  18. AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
  19. using var mutex = new Mutex(true, MUTEX_NAME, out var isFirstInstance);
  20. if (isFirstInstance == false)
  21. {
  22. return;
  23. }
  24. StartFastGithub();
  25. SetWebBrowserVersion();
  26. var app = new Application();
  27. app.StartupUri = new Uri(MAIN_WINDOWS, UriKind.Relative);
  28. app.Run();
  29. }
  30. /// <summary>
  31. /// 程序集加载失败时
  32. /// </summary>
  33. /// <param name="sender"></param>
  34. /// <param name="args"></param>
  35. /// <returns></returns>
  36. private static Assembly? OnAssemblyResolve(object sender, ResolveEventArgs args)
  37. {
  38. var name = new AssemblyName(args.Name).Name;
  39. if (name.EndsWith(".resources"))
  40. {
  41. return default;
  42. }
  43. var stream = Application.GetResourceStream(new Uri($"Resource/{name}.dll", UriKind.Relative)).Stream;
  44. var buffer = new byte[stream.Length];
  45. stream.Read(buffer, 0, buffer.Length);
  46. return Assembly.Load(buffer);
  47. }
  48. /// <summary>
  49. /// 设置浏览器版本
  50. /// </summary>
  51. private static void SetWebBrowserVersion()
  52. {
  53. const string subKey = @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
  54. var registryKey = Registry.CurrentUser.OpenSubKey(subKey, true);
  55. if (registryKey == null)
  56. {
  57. registryKey = Registry.CurrentUser.CreateSubKey(subKey);
  58. }
  59. var name = $"{Process.GetCurrentProcess().ProcessName}.exe";
  60. using var webBrowser = new System.Windows.Forms.WebBrowser();
  61. var value = int.Parse($"{webBrowser.Version.Major}000");
  62. registryKey.SetValue(name, value, RegistryValueKind.DWord);
  63. }
  64. /// <summary>
  65. /// 启动fastgithub
  66. /// </summary>
  67. /// <returns></returns>
  68. private static void StartFastGithub()
  69. {
  70. if (File.Exists(FASTGITHUB_PATH) == false)
  71. {
  72. return;
  73. }
  74. var startInfo = new ProcessStartInfo
  75. {
  76. FileName = FASTGITHUB_PATH,
  77. Arguments = $"ParentProcessId={Process.GetCurrentProcess().Id} UdpLoggerPort={UdpLogger.Port}",
  78. UseShellExecute = false,
  79. CreateNoWindow = true
  80. };
  81. Process.Start(startInfo);
  82. }
  83. }
  84. }