static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MemoryManager.AttachApp(true, true, new TimeSpan(0, 30, 0).Ticks, new TimeSpan(0, 2, 0).Ticks); OneInstance.Run(new MainForm(), "OGameOneAdmin"); }
private void Application_Startup(object sender, StartupEventArgs e) { bool isAdmin = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); try { if (OneInstance.First()) { OneInstance.OnMessage += AddRelay; } else if (e.Args.Length > 0) { OneInstance.SendMessage(new FileInfo(e.Args[0]).FullName); Shutdown(); return; } if (e.Args.Length == 0) { if (isAdmin) { InstallRegistry(); } if (!stayOpen) { Shutdown(); return; } } urlBase = listenPrefix.Replace("*", hostName).Replace("+", hostName).Replace(":80", ""); var enableWebclient = bool.Parse(ConfigurationManager.AppSettings["enableWebClient"] ?? "true"); var acceptRelays = bool.Parse(ConfigurationManager.AppSettings["acceptRelays"] ?? "true"); var maxConnections = int.Parse(ConfigurationManager.AppSettings["maxConnections"] ?? "8"); if (!string.IsNullOrEmpty(remoteHost)) { remote = true; urlBase = remoteHost.Replace("ws", "http"); } else if (listenPrefix.AlreadyListening()) { remote = true; remoteHost = urlBase.Replace("http", "ws"); } else { remote = false; server = new RelayServer() { EnableBuiltinWebclient = enableWebclient, AcceptSocketConnections = acceptRelays }; stop = new TaskCompletionSource <bool>(); listen = server.Listen(listenPrefix, maxConnections, stop); if (listen.IsFaulted) { throw listen.Exception.InnerException; } server.OnSocketRelay += (file, size, code, relay) => AddRelayStatus(file, size, urlBase + code, relay); } urlBase += urlBase.EndsWith("/") ? "" : "/"; urlBase = Regex.Replace(urlBase, "localhost", hostName, RegexOptions.IgnoreCase); var idleStatus = $"{(remote ? "Relaying to" : "Listening on")} {urlBase}"; if (!remote) { idleStatus += $"\r\n{(acceptRelays ? "Accepting" : "Not accepting")} relays" + $"\r\nWebclient is {(enableWebclient ? "enabled" : "disabled")}" + $"\r\n{maxConnections} max connections"; } relayStatus = new RelayStatus(idleStatus); notifyIcon = (TaskbarIcon)FindResource("NotifyIcon"); notifyIcon.TrayToolTip = relayStatus; notifyIcon.DataContext = relayStatus; if (e.Args.Length > 0) { AddRelay(e.Args[0]); } else { notifyIcon.Icon = appIcon; ShowRelays(); } } catch (System.Net.HttpListenerException ex) when((uint)ex.HResult == 0x80004005) // access denied { if (!isAdmin) { OneInstance.Dispose(); Process.Start(new ProcessStartInfo(Assembly.GetEntryAssembly().Location, e.Args.Length > 0 ? e.Args[0] : "") { Verb = "runas" }); } else { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } Shutdown(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); Shutdown(); } }