using Microsoft.Win32; using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Threading; using System.Windows; namespace FastGithub.UI { class Program { private const string MUTEX_NAME = "Global\\FastGithub.UI"; private const string MAIN_WINDOWS = "MainWindow.xaml"; private const string FASTGITHUB_PATH = "fastgithub.exe"; [STAThread] static void Main(string[] args) { AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; using var mutex = new Mutex(true, MUTEX_NAME, out var isFirstInstance); if (isFirstInstance == false) { return; } StartFastGithub(); SetWebBrowserDPI(); SetWebBrowserVersion(); var app = new Application(); app.StartupUri = new Uri(MAIN_WINDOWS, UriKind.Relative); app.Run(); } /// /// 程序集加载失败时 /// /// /// /// private static Assembly? OnAssemblyResolve(object sender, ResolveEventArgs args) { var name = new AssemblyName(args.Name).Name; if (name.EndsWith(".resources")) { return default; } var stream = Application.GetResourceStream(new Uri($"Resource/{name}.dll", UriKind.Relative)).Stream; var buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); return Assembly.Load(buffer); } /// /// 设置浏览器版本 /// private static void SetWebBrowserVersion() { const string subKey = @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; var registryKey = Registry.CurrentUser.OpenSubKey(subKey, true); if (registryKey == null) { registryKey = Registry.CurrentUser.CreateSubKey(subKey); } var name = $"{Process.GetCurrentProcess().ProcessName}.exe"; using var webBrowser = new System.Windows.Forms.WebBrowser(); var value = int.Parse($"{webBrowser.Version.Major}000"); registryKey.SetValue(name, value, RegistryValueKind.DWord); } /// /// 设置浏览器DPI /// private static void SetWebBrowserDPI() { const string subKey = @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_96DPI_PIXEL"; var registryKey = Registry.CurrentUser.OpenSubKey(subKey, true); if (registryKey == null) { registryKey = Registry.CurrentUser.CreateSubKey(subKey); } var name = $"{Process.GetCurrentProcess().ProcessName}.exe"; registryKey.SetValue(name, 1, RegistryValueKind.DWord); } /// /// 启动fastgithub /// /// private static void StartFastGithub() { if (File.Exists(FASTGITHUB_PATH) == false) { return; } var startInfo = new ProcessStartInfo { FileName = FASTGITHUB_PATH, Arguments = $"ParentProcessId={Process.GetCurrentProcess().Id} UdpLoggerPort={UdpLogger.Port}", UseShellExecute = false, CreateNoWindow = true }; Process.Start(startInfo); } } }