94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
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();
 | 
						|
            SetWebBrowserVersion();
 | 
						|
 | 
						|
            var app = new Application();
 | 
						|
            app.StartupUri = new Uri(MAIN_WINDOWS, UriKind.Relative);
 | 
						|
            app.Run();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 程序集加载失败时
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sender"></param>
 | 
						|
        /// <param name="args"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        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);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 设置浏览器版本
 | 
						|
        /// </summary>
 | 
						|
        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);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 启动fastgithub
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        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);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |