public static async Task SubmitError(Exception exception) { var mainsrv = DetectLinux.LinuxDetected() ? mainserver.Replace("https", "http") : mainserver; Url url = new Url(mainsrv + "/error-report"); await url.PostJsonAsync(new { message = exception.Message ?? "no message", stackTrace = exception.StackTrace ?? "no stack trace" }); }
public static void SetState(IntPtr windowHandle, TaskbarStates taskbarState) { try { if (taskbarSupported && !DetectLinux.LinuxDetected()) { taskbarInstance.SetProgressState(windowHandle, taskbarState); } } catch { } }
public static void SetValue(IntPtr windowHandle, double progressValue, double progressMax) { try { if (taskbarSupported && !DetectLinux.LinuxDetected()) { taskbarInstance.SetProgressValue(windowHandle, (ulong)progressValue, (ulong)progressMax); } } catch { } }
public static bool RuleExist(string nameOfApp) { if (DetectLinux.LinuxDetected()) { return(true); } else { return(FindRules(nameOfApp).Any()); } }
public static string Value() { if (string.IsNullOrEmpty(fingerPrint)) { if (!DetectLinux.LinuxDetected()) { fingerPrint = WindowsValue(); } else if (DetectLinux.LinuxDetected()) { fingerPrint = LinuxValue(); } } return(fingerPrint); }
public static void CheckAvailability() { if (!DetectLinux.LinuxDetected()) { switch (APIStatusChecker.CheckStatus(URLs.mainserver + "/update.php?version=" + Application.ProductVersion)) { case APIStatus.Online: MainAPI(); break; default: GitHubAPI(); break; } } }
protected override WebRequest GetWebRequest(Uri address) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); request.UserAgent = "GameLauncher (+https://github.com/worldunitedgg/GameLauncher_NFSW)"; if (!DetectLinux.NativeLinuxDetected()) { request.Headers["X-HWID"] = Security.FingerPrint.Value(); } else { request.Headers["X-HWID"] = "1234"; } request.Headers["X-GameLauncherHash"] = Value(); request.Timeout = 30000; return(request); }
protected override WebRequest GetWebRequest(Uri address) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); request.UserAgent = "GameLauncher (+https://github.com/SoapboxRaceWorld/GameLauncher_NFSW)"; if (!DetectLinux.NativeLinuxDetected()) { request.Headers["X-HWID"] = Security.FingerPrint.Value(); } else { request.Headers["X-HWID"] = "1234"; } request.Headers["X-GameLauncherHash"] = Value(); request.Headers["secret"] = "0148e7cc5b47aa2fb09c12caae2a4b65"; request.Timeout = 30000; return(request); }
protected override WebRequest GetWebRequest(Uri address) { if (DetectLinux.LinuxDetected()) { address = new UriBuilder(address) { Scheme = Uri.UriSchemeHttp, Port = address.IsDefaultPort ? -1 : address.Port // -1 => default port for scheme }.Uri; } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); request.UserAgent = (Self.userAgent == null) ? "GameLauncher (+https://github.com/SoapboxRaceWorld/GameLauncher_NFSW)" : Self.userAgent; request.Headers["X-HWID"] = Security.FingerPrint.Value(); request.Headers["X-UserAgent"] = "GameLauncherReborn " + Application.ProductVersion + " WinForms (+https://github.com/worldunitedgg/GameLauncher_NFSW)"; request.Headers["X-GameLauncherHash"] = Value(); request.Headers["X-DiscordID"] = Self.discordid; //request.Timeout = 30000; return(request); }
/* Sets Folder Permissions */ public static void GiveEveryoneReadWriteFolderAccess(string path) { if (!DetectLinux.LinuxDetected()) { try { DirectoryInfo Info = new DirectoryInfo(path); DirectorySecurity FolderSecurity = Info.GetAccessControl(); SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null); FolderSecurity.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); Directory.SetAccessControl(path, FolderSecurity); } catch (Exception ex) { Log.Error("FOLDER PERMISSION: " + ex.Message); } } }
/* Sets File Permissions */ public static void GiveEveryoneReadWriteFileAccess(string path) { if (!DetectLinux.LinuxDetected()) { try { var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null); var accessRule = new FileSystemAccessRule(everyone, FileSystemRights.FullControl, InheritanceFlags.None, PropagationFlags.NoPropagateInherit, AccessControlType.Allow); var fileSecurity = File.GetAccessControl(path); fileSecurity.AddAccessRule(accessRule); File.SetAccessControl(path, fileSecurity); } catch (Exception ex) { Log.Error("FILE PERMISSION: " + ex.Message); } } }
internal static void Main() { Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle; Console.WriteLine("Application path: " + Path.GetDirectoryName(Application.ExecutablePath)); /*GPU getinfo = null; * * switch(GPUHelper.getManufacturer()) { * case GPUHelper.GPUManufacturer.NVIDIA: * getinfo = new NVIDIA(); * break; * case GPUHelper.GPUManufacturer.AMD: * getinfo = new AMD(); * break; * case GPUHelper.GPUManufacturer.INTEL: * getinfo = new INTEL(); * break; * default: * getinfo = null; * break; * } * * MeTonaTOR.MessageBox.Show(getinfo.DriverVersion());*/ if (!Self.hasWriteAccessToFolder(Path.GetDirectoryName(Application.ExecutablePath))) { MessageBox.Show("This application requires admin priviledge. Restarting..."); Self.runAsAdmin(); } IniFile _settingFile = new IniFile("Settings.ini"); if (!string.IsNullOrEmpty(_settingFile.Read("DisableVerifyHash"))) { _settingFile.Write("DisableVerifyHash", "1"); } if (!string.IsNullOrEmpty(_settingFile.Read("InstallationDirectory"))) { Console.WriteLine("Game path: " + _settingFile.Read("InstallationDirectory")); if (!Self.hasWriteAccessToFolder(_settingFile.Read("InstallationDirectory"))) { MessageBox.Show("This application requires admin priviledge. Restarting..."); Self.runAsAdmin(); } } File.Delete("log.txt"); Log.StartLogging(); //StaticConfiguration.DisableErrorTraces = false; Log.Debug("Setting up current directory: " + Path.GetDirectoryName(Application.ExecutablePath)); Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath)); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); Log.Debug("Checking current directory"); if (Self.isTempFolder(Directory.GetCurrentDirectory())) { MessageBox.Show(null, "Please, extract me and my DLL files before executing...", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); } if (!File.Exists("GameLauncherUpdater.exe")) { Log.Debug("Starting GameLauncherUpdater downloader"); try { using (WebClientWithTimeout wc = new WebClientWithTimeout()) { wc.DownloadFileCompleted += (object sender, AsyncCompletedEventArgs e) => { if (new FileInfo("GameLauncherUpdater.exe").Length == 0) { File.Delete("GameLauncherUpdater.exe"); } }; wc.DownloadFileAsync(new Uri(Self.mainserver + "/files/GameLauncherUpdater.exe"), "GameLauncherUpdater.exe"); } } catch (Exception ex) { Log.Debug("Failed to download updater. " + ex.Message); } } if (!File.Exists("servers.json")) { try { File.WriteAllText("servers.json", "[]"); } catch { /* ignored */ } } ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; if (Debugger.IsAttached) { Log.Debug("Checking Proxy"); ServerProxy.Instance.Start(); Log.Debug("Starting MainScreen"); Application.Run(new MainScreen()); } else { if (NFSW.isNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } var mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); try { if (mutex.WaitOne(0, false)) { string[] files = { "DiscordRPC.dll - 1.0.0.0", "Flurl.dll - 2.8.2", "Flurl.Http.dll - 2.4.2", "INIFileParser.dll - 2.5.2", "LZMA.dll - 9.10 beta", "Microsoft.WindowsAPICodePack.dll - 1.1.0.0", "Microsoft.WindowsAPICodePack.Shell.dll - 1.1.0.0", "Microsoft.WindowsAPICodePack.ShellExtensions.dll - 1.1.0.0", "Nancy.dll - 2.0.0", "Nancy.Hosting.Self.dll - 2.0.0", "Newtonsoft.Json.dll - 12.0.3", "SharpRaven.dll - 2.4.0", "System.Runtime.InteropServices.RuntimeInformation.dll - 4.6.24705.01. Commit Hash: 4d1af962ca0fede10beb01d197367c2f90e92c97" }; var missingfiles = new List <string>(); if (!DetectLinux.LinuxDetected()) //MONO Hates that... { foreach (var file in files) { var splitFileVersion = file.Split(new string[] { " - " }, StringSplitOptions.None); if (!File.Exists(Directory.GetCurrentDirectory() + "\\" + splitFileVersion[0])) { missingfiles.Add(splitFileVersion[0] + " - Not Found"); } else { try { var versionInfo = FileVersionInfo.GetVersionInfo(splitFileVersion[0]); string[] versionsplit = versionInfo.ProductVersion.Split('+'); string version = versionsplit[0]; if (version == "") { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } else { if (Self.CheckArchitectureFile(splitFileVersion[0]) == false) { missingfiles.Add(splitFileVersion[0] + " - Wrong Architecture"); } else { if (version != splitFileVersion[1]) { missingfiles.Add(splitFileVersion[0] + " - Invalid Version (" + splitFileVersion[1] + " != " + version + ")"); } } } } catch { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } } } } if (missingfiles.Count != 0) { var message = "Cannot launch GameLauncher. The following files are invalid:\n\n"; foreach (var file in missingfiles) { message += "• " + file + "\n"; } MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { Log.Debug("Checking Proxy"); ServerProxy.Instance.Start(); Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionEventHandler); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionEventHandler); Log.Debug("Starting MainScreen"); Application.Run(new MainScreen()); } } else { MessageBox.Show(null, "An instance of Launcher is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { mutex.Close(); mutex = null; } } }
public SelectServer() { InitializeComponent(); SetVisuals(); Version.Text = "Version: v" + Application.ProductVersion; //And one for keeping data about server, IP tbh ServerListRenderer.View = View.Details; ServerListRenderer.FullRowSelect = true; ServerListRenderer.Columns.Add(""); ServerListRenderer.Columns[0].Width = 1; ServerListRenderer.Columns.Add("Name"); ServerListRenderer.Columns[1].Width = 210; ServerListRenderer.Columns.Add("Country"); ServerListRenderer.Columns[2].Width = 100; ServerListRenderer.Columns[2].TextAlign = HorizontalAlignment.Center; ServerListRenderer.Columns.Add("Online"); ServerListRenderer.Columns[3].Width = 75; ServerListRenderer.Columns[3].TextAlign = HorizontalAlignment.Center; ServerListRenderer.Columns.Add("Registered"); ServerListRenderer.Columns[4].Width = 85; ServerListRenderer.Columns[4].TextAlign = HorizontalAlignment.Center; ServerListRenderer.Columns.Add("Ping"); ServerListRenderer.Columns[5].Width = 60; ServerListRenderer.Columns[5].TextAlign = HorizontalAlignment.Center; foreach (var substring in ServerListUpdater.NoCategoryList) { try { servers.Enqueue(ID + "_|||_" + substring.IpAddress + "_|||_" + substring.Name); ServerListRenderer.Items.Add(new ListViewItem( new[] { ID.ToString(), substring.Name, "", "", "", "", "" } )); data.Add(ID, substring); ID++; } catch { } } Thread newList = new Thread(() => { Thread.Sleep(200); this.BeginInvoke((MethodInvoker) delegate { while (servers.Count != 0) { string QueueContent = servers.Dequeue(); string[] QueueContent2 = QueueContent.Split(new string[] { "_|||_" }, StringSplitOptions.None); int serverid = Convert.ToInt32(QueueContent2[0]) - 1; string serverurl = QueueContent2[1] + "/GetServerInformation"; string servername = QueueContent2[2]; try { WebClient getdata = new WebClient(); GetServerInformation content = JsonConvert.DeserializeObject <GetServerInformation>(getdata.DownloadString(serverurl)); if (content == null) { ServerListRenderer.Items[serverid].SubItems[1].Text = servername; ServerListRenderer.Items[serverid].SubItems[2].Text = "---"; ServerListRenderer.Items[serverid].SubItems[3].Text = "---"; ServerListRenderer.Items[serverid].SubItems[4].Text = "---"; } else { ServerListRenderer.Items[serverid].SubItems[1].Text = servername; ServerListRenderer.Items[serverid].SubItems[2].Text = ServerListUpdater.CountryName(content.country.ToString()); ServerListRenderer.Items[serverid].SubItems[3].Text = content.onlineNumber.ToString(); ServerListRenderer.Items[serverid].SubItems[4].Text = content.numberOfRegistered.ToString(); //PING if (!DetectLinux.LinuxDetected()) { Ping pingSender = new Ping(); Uri StringToUri = new Uri(serverurl); pingSender.SendAsync(StringToUri.Host, 1000, new byte[1], new PingOptions(64, true), new AutoResetEvent(false)); pingSender.PingCompleted += (sender3, e3) => { PingReply reply = e3.Reply; if (reply.Status == IPStatus.Success && servername != "Offline Built-In Server") { ServerListRenderer.Items[serverid].SubItems[5].Text = reply.RoundtripTime + "ms"; } else { ServerListRenderer.Items[serverid].SubItems[5].Text = "---"; } }; } else { ServerListRenderer.Items[serverid].SubItems[5].Text = "N/A"; } } } catch { ServerListRenderer.Items[serverid].SubItems[1].Text = servername; ServerListRenderer.Items[serverid].SubItems[2].Text = "---"; ServerListRenderer.Items[serverid].SubItems[3].Text = "---"; ServerListRenderer.Items[serverid].SubItems[4].Text = "---"; ServerListRenderer.Items[serverid].SubItems[5].Text = "---"; } if (servers.Count == 0) { Loading.Text = ""; } Application.DoEvents(); } }); }) { IsBackground = true }; newList.Start(); ServerListRenderer.AllowColumnReorder = false; ServerListRenderer.ColumnWidthChanging += (handler, args) => { args.Cancel = true; args.NewWidth = ServerListRenderer.Columns[args.ColumnIndex].Width; }; ServerListRenderer.DoubleClick += new EventHandler((handler, args) => { SelectedGameServerToRemember(); }); }
private void SetVisuals() { /*******************************/ /* Set Initial position & Icon / * /*******************************/ this.StartPosition = FormStartPosition.CenterParent; /*******************************/ /* Set Background Image / * /*******************************/ BackgroundImage = Theming.SettingsScreen; /*******************************/ /* Set Hardcoded Text / * /*******************************/ SettingsCDNCurrent.Text = FileSettingsSave.CDN; SettingsGameFilesCurrent.Text = FileSettingsSave.GameInstallation; SettingsLauncherPathCurrent.Text = AppDomain.CurrentDomain.BaseDirectory; SettingsLauncherVersion.Text = "Version: v" + Application.ProductVersion; /*******************************/ /* Set Font / * /*******************************/ FontFamily DejaVuSans = FontWrapper.Instance.GetFontFamily("DejaVuSans.ttf"); FontFamily DejaVuSansBold = FontWrapper.Instance.GetFontFamily("DejaVuSans-Bold.ttf"); var MainFontSize = 9f * 100f / CreateGraphics().DpiY; var SecondaryFontSize = 8f * 100f / CreateGraphics().DpiY; if (DetectLinux.LinuxDetected()) { MainFontSize = 9f; SecondaryFontSize = 8f; } Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); SettingsAboutButton.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsGamePathText.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsGameFiles.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsCDNText.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsCDNPick.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); SettingsLanguageText.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsLanguage.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); SettingsClearCrashLogsButton.Font = new Font(DejaVuSansBold, SecondaryFontSize, FontStyle.Bold); SettingsClearCommunicationLogButton.Font = new Font(DejaVuSansBold, SecondaryFontSize, FontStyle.Bold); SettingsClearServerModCacheButton.Font = new Font(DejaVuSansBold, SecondaryFontSize, FontStyle.Bold); SettingsWordFilterCheck.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsProxyCheckbox.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsDiscordRPCCheckbox.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsGameFilesCurrentText.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsGameFilesCurrent.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsCDNCurrentText.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsCDNCurrent.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsLauncherPathText.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsLauncherPathCurrent.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsNetworkText.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsMainSrvText.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsMainCDNText.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsBkupSrvText.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsBkupCDNText.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsVFilesButton.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsLauncherVersion.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); SettingsSave.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); SettingsCancel.Font = new Font(DejaVuSansBold, MainFontSize, FontStyle.Bold); ThemeName.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); ThemeAuthor.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); /********************************/ /* Set Theme Colors & Images / * /********************************/ /* Buttons */ SettingsGameFiles.ForeColor = Theming.BlueForeColorButton; SettingsGameFiles.BackColor = Theming.BlueBackColorButton; SettingsGameFiles.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; SettingsGameFiles.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; SettingsAboutButton.ForeColor = Theming.BlueForeColorButton; SettingsAboutButton.BackColor = Theming.BlueBackColorButton; SettingsAboutButton.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; SettingsAboutButton.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; SettingsVFilesButton.ForeColor = Theming.YellowForeColorButton; SettingsVFilesButton.BackColor = Theming.YellowBackColorButton; SettingsVFilesButton.FlatAppearance.BorderColor = Theming.YellowBorderColorButton; SettingsVFilesButton.FlatAppearance.MouseOverBackColor = Theming.YellowMouseOverBackColorButton; SettingsClearCrashLogsButton.ForeColor = Theming.BlueForeColorButton; SettingsClearCrashLogsButton.BackColor = Theming.BlueBackColorButton; SettingsClearCrashLogsButton.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; SettingsClearCrashLogsButton.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; SettingsClearCommunicationLogButton.ForeColor = Theming.BlueForeColorButton; SettingsClearCommunicationLogButton.BackColor = Theming.BlueBackColorButton; SettingsClearCommunicationLogButton.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; SettingsClearCommunicationLogButton.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; SettingsClearServerModCacheButton.ForeColor = Theming.BlueForeColorButton; SettingsClearServerModCacheButton.BackColor = Theming.BlueBackColorButton; SettingsClearServerModCacheButton.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; SettingsClearServerModCacheButton.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; /* Label Links */ SettingsGameFilesCurrent.LinkColor = Theming.SettingsLink; SettingsGameFilesCurrent.ActiveLinkColor = Theming.SettingsActiveLink; SettingsCDNCurrent.LinkColor = Theming.SettingsLink; SettingsCDNCurrent.ActiveLinkColor = Theming.SettingsActiveLink; SettingsLauncherPathCurrent.LinkColor = Theming.SettingsLink; SettingsLauncherPathCurrent.ActiveLinkColor = Theming.SettingsActiveLink; /* Labels */ SettingsGamePathText.ForeColor = Theming.FivithTextForeColor; SettingsGameFilesCurrentText.ForeColor = Theming.FivithTextForeColor; SettingsCDNCurrentText.ForeColor = Theming.FivithTextForeColor; SettingsLauncherPathText.ForeColor = Theming.FivithTextForeColor; SettingsCDNText.ForeColor = Theming.FivithTextForeColor; SettingsLanguageText.ForeColor = Theming.FivithTextForeColor; SettingsNetworkText.ForeColor = Theming.FivithTextForeColor; /* Check boxes */ SettingsWordFilterCheck.ForeColor = Theming.SettingsCheckBoxes; SettingsProxyCheckbox.ForeColor = Theming.SettingsCheckBoxes; SettingsDiscordRPCCheckbox.ForeColor = Theming.SettingsCheckBoxes; /* Bottom Left */ SettingsLauncherVersion.ForeColor = Theming.FivithTextForeColor; ThemeName.ForeColor = Theming.FivithTextForeColor; ThemeAuthor.ForeColor = Theming.FivithTextForeColor; /* Main Settings Buttons (Save or Cancel) */ SettingsSave.ForeColor = Theming.SeventhTextForeColor; SettingsSave.Image = Theming.GreenButton; SettingsCancel.Image = Theming.GrayButton; SettingsCancel.ForeColor = Theming.MainTextForeColor; /********************************/ /* Events / * /********************************/ SettingsCDNPick.DrawItem += new DrawItemEventHandler(SettingsCDNPick_DrawItem); SettingsLanguage.DrawItem += new DrawItemEventHandler(SettingsLanguage_DrawItem); SettingsSave.MouseEnter += new EventHandler(Greenbutton_hover_MouseEnter); SettingsSave.MouseLeave += new EventHandler(Greenbutton_MouseLeave); SettingsSave.MouseUp += new MouseEventHandler(Greenbutton_hover_MouseUp); SettingsSave.MouseDown += new MouseEventHandler(Greenbutton_click_MouseDown); SettingsCancel.MouseEnter += new EventHandler(Graybutton_hover_MouseEnter); SettingsCancel.MouseLeave += new EventHandler(Graybutton_MouseLeave); SettingsCancel.MouseUp += new MouseEventHandler(Graybutton_hover_MouseUp); SettingsCancel.MouseDown += new MouseEventHandler(Graybutton_click_MouseDown); }
/*******************************/ /* On Button/Dropdown Functions / * /*******************************/ /* Settings Save */ private void SettingsSave_Click(object sender, EventArgs e) { //TODO null check FileSettingsSave.Lang = SettingsLanguage.SelectedValue.ToString(); if (WindowsProductVersion.GetWindowsNumber() >= 10.0 && (FileSettingsSave.GameInstallation != _newGameFilesPath) && !DetectLinux.LinuxDetected()) { WindowsDefenderGameFilesDirctoryChange(); } else if (FileSettingsSave.GameInstallation != _newGameFilesPath) { CheckGameFilesDirectoryPrevention(); if (!DetectLinux.LinuxDetected()) { //Remove current Firewall for the Game Files string CurrentGameFilesExePath = Path.Combine(FileSettingsSave.GameInstallation + "\\nfsw.exe"); if (File.Exists(CurrentGameFilesExePath) && FirewallHelper.RuleExist("SBRW - Game") == true) { bool removeFirewallRule = true; bool firstTimeRun = true; string nameOfGame = "SBRW - Game"; string localOfGame = CurrentGameFilesExePath; string groupKeyGame = "Need for Speed: World"; string descriptionGame = groupKeyGame; //Inbound & Outbound FirewallHelper.DoesRulesExist(removeFirewallRule, firstTimeRun, nameOfGame, localOfGame, groupKeyGame, descriptionGame, FirewallProtocol.Any); } } FileSettingsSave.GameInstallation = _newGameFilesPath; //Clean Mods Files from New Dirctory (If it has .links in directory) var linksPath = Path.Combine(_newGameFilesPath, "\\.links"); ModNetLinksCleanup.CleanLinks(linksPath); _restartRequired = true; } if (FileSettingsSave.CDN != ((CDNObject)SettingsCDNPick.SelectedItem).Url) { SettingsCDNCurrentText.Text = "CHANGED CDN"; SettingsCDNCurrent.Text = ((CDNObject)SettingsCDNPick.SelectedItem).Url; FileSettingsSave.CDN = ((CDNObject)SettingsCDNPick.SelectedItem).Url; _restartRequired = true; } String disableProxy = (SettingsProxyCheckbox.Checked == true) ? "1" : "0"; if (FileSettingsSave.Proxy != disableProxy) { FileSettingsSave.Proxy = (SettingsProxyCheckbox.Checked == true) ? "1" : "0"; _restartRequired = true; } String disableRPC = (SettingsDiscordRPCCheckbox.Checked == true) ? "1" : "0"; if (FileSettingsSave.RPC != disableRPC) { FileSettingsSave.RPC = (SettingsDiscordRPCCheckbox.Checked == true) ? "1" : "0"; _restartRequired = true; } if (_restartRequired) { MessageBox.Show(null, "In order to see settings changes, you need to restart launcher manually.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Information); } //Actually lets check those 2 files if (File.Exists(FileSettingsSave.GameInstallation + "/profwords") && File.Exists(FileSettingsSave.GameInstallation + "/profwords_dis")) { File.Delete(FileSettingsSave.GameInstallation + "/profwords_dis"); } //Delete/Enable profwords filter here if (SettingsWordFilterCheck.Checked) { if (File.Exists(FileSettingsSave.GameInstallation + "/profwords")) { File.Move(FileSettingsSave.GameInstallation + "/profwords", FileSettingsSave.GameInstallation + "/profwords_dis"); } } else { if (File.Exists(FileSettingsSave.GameInstallation + "/profwords_dis")) { File.Move(FileSettingsSave.GameInstallation + "/profwords_dis", FileSettingsSave.GameInstallation + "/profwords"); } } /* Save Settings */ FileSettingsSave.SaveSettings(); var userSettingsXml = new XmlDocument(); try { if (File.Exists(_userSettings)) { try { userSettingsXml.Load(_userSettings); var language = userSettingsXml.SelectSingleNode("Settings/UI/Language"); language.InnerText = SettingsLanguage.SelectedValue.ToString(); } catch { File.Delete(_userSettings); var setting = userSettingsXml.AppendChild(userSettingsXml.CreateElement("Settings")); var ui = setting.AppendChild(userSettingsXml.CreateElement("UI")); var persistentValue = setting.AppendChild(userSettingsXml.CreateElement("PersistentValue")); var chat = persistentValue.AppendChild(userSettingsXml.CreateElement("Chat")); chat.InnerXml = "<DefaultChatGroup Type=\"string\">" + Self.currentLanguage + "</DefaultChatGroup>"; ui.InnerXml = "<Language Type=\"string\">" + SettingsLanguage.SelectedValue + "</Language>"; var directoryInfo = Directory.CreateDirectory(Path.GetDirectoryName(_userSettings)); } } else { try { var setting = userSettingsXml.AppendChild(userSettingsXml.CreateElement("Settings")); var ui = setting.AppendChild(userSettingsXml.CreateElement("UI")); var persistentValue = setting.AppendChild(userSettingsXml.CreateElement("PersistentValue")); var chat = persistentValue.AppendChild(userSettingsXml.CreateElement("Chat")); chat.InnerXml = "<DefaultChatGroup Type=\"string\">" + Self.currentLanguage + "</DefaultChatGroup>"; ui.InnerXml = "<Language Type=\"string\">" + SettingsLanguage.SelectedValue + "</Language>"; var directoryInfo = Directory.CreateDirectory(Path.GetDirectoryName(_userSettings)); } catch (Exception ex) { MessageBox.Show(null, "There was an error saving your settings to actual file. Restoring default.\n" + ex.Message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); File.Delete(_userSettings); } } } catch (Exception ex) { MessageBox.Show(null, "There was an error saving your settings to actual file. Restoring default.\n" + ex.Message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); File.Delete(_userSettings); } /* Save XML Settings */ userSettingsXml.Save(_userSettings); //DialogResult = DialogResult.OK; Close(); }
private void DebugWindow_Load(object sender, EventArgs e) { data.AutoGenerateColumns = true; IniFile SettingFile = new IniFile("Settings.ini"); string TracksHigh = (SettingFile.Read("TracksHigh") == "1") ? "True" : "False"; string Password = (!String.IsNullOrEmpty(SettingFile.Read("Password"))) ? "True" : "False"; string SkipUpdate = (SettingFile.Read("SkipUpdate") == "1") ? "True" : "False"; string Antivirus = String.Empty; string Firewall = String.Empty; string AntiSpyware = String.Empty; if (!DetectLinux.UnixDetected()) { try { Antivirus = (String.IsNullOrEmpty(AntivirusInstalled())) ? "---" : AntivirusInstalled(); Firewall = (String.IsNullOrEmpty(AntivirusInstalled("FirewallProduct"))) ? "---" : AntivirusInstalled("FirewallProduct"); AntiSpyware = (String.IsNullOrEmpty(AntivirusInstalled("AntiSpywareProduct"))) ? "---" : AntivirusInstalled("AntiSpywareProduct"); } catch { Antivirus = "Unknown"; Firewall = "Unknown"; AntiSpyware = "Unknown"; } } string LauncherPosition = ""; string OS = ""; if (DetectLinux.WineDetected()) { OS = "Wine"; } else if (DetectLinux.LinuxDetected()) { OS = "Linux"; } else if (DetectLinux.MacOSDetected()) { OS = "MacOS"; } else { OS = (from x in new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().Cast <ManagementObject>() select x.GetPropertyValue("Caption")).FirstOrDefault().ToString(); } if (SettingFile.Read("LauncherPosX") + "x" + SettingFile.Read("LauncherPosY") == "x") { LauncherPosition = "Windows Default Position"; } else { LauncherPosition = SettingFile.Read("LauncherPosX") + "x" + SettingFile.Read("LauncherPosY"); } long memKb = 0; ulong lpFreeBytesAvailable = 0; List <string> GPUs = new List <string>(); string Win32_Processor = ""; if (!DetectLinux.UnixDetected()) { Kernel32.GetPhysicallyInstalledSystemMemory(out memKb); ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_VideoController"); string graphicsCard = string.Empty; foreach (ManagementObject mo in searcher.Get()) { foreach (PropertyData property in mo.Properties) { GPUs.Add(property.Value.ToString()); } } Win32_Processor = (from x in new ManagementObjectSearcher("SELECT Name FROM Win32_Processor").Get().Cast <ManagementObject>() select x.GetPropertyValue("Name")).FirstOrDefault().ToString(); Kernel32.GetDiskFreeSpaceEx(SettingFile.Read("InstallationDirectory"), out lpFreeBytesAvailable, out ulong lpTotalNumberOfBytes, out ulong lpTotalNumberOfFreeBytes); } var Win32_VideoController = string.Join(" | ", GPUs); var settings = new List <ListType> { new ListType { Name = "InstallationDirectory", Value = SettingFile.Read("InstallationDirectory") }, new ListType { Name = "HWID", Value = Security.FingerPrint.Value() }, new ListType { Name = "Server Address", Value = ServerIP }, new ListType { Name = "Server Name", Value = ServerName }, new ListType { Name = "Credentials Saved", Value = Password }, new ListType { Name = "Language", Value = SettingFile.Read("Language") }, new ListType { Name = "TracksHigh", Value = TracksHigh }, new ListType { Name = "SkipUpdate", Value = SkipUpdate }, new ListType { Name = "LauncherPos", Value = LauncherPosition }, new ListType { Name = "ProxyPort", Value = Self.ProxyPort.ToString() }, new ListType { Name = "", Value = "" }, }; if (DetectLinux.UnixDetected()) { var embedded = Directory.Exists("wine"); settings.Add(new ListType { Name = "Embedded Wine", Value = embedded.ToString() }); if (!embedded) { settings.Add(new ListType { Name = "Wine version", Value = WineManager.GetWineVersion() }); } settings.Add(new ListType { Name = "", Value = "" }); } if (!DetectLinux.UnixDetected()) { settings.AddRange(new[] { new ListType { Name = "Antivirus", Value = Antivirus }, new ListType { Name = "Firewall", Value = Firewall }, new ListType { Name = "AntiSpyware", Value = AntiSpyware }, new ListType { Name = "", Value = "" }, new ListType { Name = "CPU", Value = Win32_Processor }, new ListType { Name = "GPU", Value = Win32_VideoController }, new ListType { Name = "RAM", Value = (memKb / 1024).ToString() + "MB" }, new ListType { Name = "Disk Space Left", Value = FormatFileSize(lpFreeBytesAvailable) }, new ListType { Name = "", Value = "" } }); } settings.AddRange(new[] { new ListType { Name = "Operating System", Value = OS }, new ListType { Name = "Environment Version", Value = Environment.OSVersion.Version.ToString() }, new ListType { Name = "Screen Resolution", Value = Screen.PrimaryScreen.Bounds.Width + "x" + Screen.PrimaryScreen.Bounds.Height } }); data.DataSource = settings; DataGridViewCellStyle style = new DataGridViewCellStyle(); style.Font = new Font(data.Font, FontStyle.Bold); data.Columns[0].DefaultCellStyle = style; data.Columns[0].Width += 50; int size_x = 1024; int size_y = 450; data.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.Size = new Size(size_x, size_y); }
internal static void Main() { var linux = DetectLinux.NativeLinuxDetected(); Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath) ?? throw new InvalidOperationException()); if (Self.isTempFolder(Directory.GetCurrentDirectory())) { MessageBox.Show(null, "Please, extract me and my DLL files before executing...", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); } if (!Directory.Exists("Languages")) { Directory.CreateDirectory("Languages"); } try { File.Delete("Languages/Default.lng"); File.WriteAllText("Languages/Default.lng", ExtractResource.AsString("GameLauncher.Language.Default.lng")); } catch { // ignored } try { File.Delete(Directory.GetCurrentDirectory() + "\\tempname.zip"); } catch { // ignored } if (!File.Exists("LZMA.dll")) { File.WriteAllBytes("LZMA.dll", ExtractResource.AsByte("GameLauncher.LZMA.LZMA.dll")); } if (!linux && !File.Exists("discord-rpc.dll")) { File.WriteAllBytes("discord-rpc.dll", ExtractResource.AsByte("GameLauncher.Discord.discord-rpc.dll")); } if (linux && !File.Exists("libdiscord-rpc.so")) { File.WriteAllBytes("libdiscord-rpc.so", ExtractResource.AsByte("GameLauncher.Discord.libdiscord-rpc.so")); } if (File.Exists("GL_Update.exe")) { File.Delete("GL_Update.exe"); } if (!File.Exists("GameLauncherUpdater.exe")) { try { File.WriteAllBytes("GameLauncherUpdater.exe", new WebClientWithTimeout().DownloadData("http://launcher.soapboxrace.world/GameLauncherUpdater.exe")); } catch { // ignored } } if (!File.Exists("servers.json")) { try { File.WriteAllText("servers.json", "[]"); } catch { // ignored } } if (Debugger.IsAttached) { ServerProxy.Instance.Start(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainScreen()); } else { if (NFSW.isNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } var mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); try { if (mutex.WaitOne(0, false)) { string[] files = { "Newtonsoft.Json.dll", "INIFileParser.dll", "Microsoft.WindowsAPICodePack.dll", "Microsoft.WindowsAPICodePack.Shell.dll", "Flurl.dll", "Flurl.Http.dll", "BlackListedServers.dat" }; var missingfiles = new List <string>(); foreach (var file in files) { if (!File.Exists(file)) { missingfiles.Add(file); } } if (missingfiles.Count != 0) { var message = "Cannot launch GameLauncher. The following files are missing:\n\n"; foreach (var file in missingfiles) { message += "• " + file + "\n"; } message += "\nCurrent directory: " + Directory.GetCurrentDirectory(); MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(1); } ServerProxy.Instance.Start(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainScreen()); } else { MessageBox.Show(null, "An instance of the application is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { mutex.Close(); mutex = null; } } }
static void Main() { int SysVersion = (int)Environment.OSVersion.Platform; bool mono = DetectLinux.MonoDetected(); bool wine = DetectLinux.WineDetected(); bool linux = DetectLinux.LinuxDetected(); //Discord fix Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath)); //Languages if (!File.Exists("Languages")) { Directory.CreateDirectory("Languages"); File.WriteAllText("Languages/Dutch.lng", ExtractResource.AsString("GameLauncher.Languages.Dutch.lng")); File.WriteAllText("Languages/English.lng", ExtractResource.AsString("GameLauncher.Languages.English.lng")); File.WriteAllText("Languages/French.lng", ExtractResource.AsString("GameLauncher.Languages.French.lng")); File.WriteAllText("Languages/German_Formal.lng", ExtractResource.AsString("GameLauncher.Languages.German_Formal.lng")); File.WriteAllText("Languages/German_Informal.lng", ExtractResource.AsString("GameLauncher.Languages.German_Informal.lng")); File.WriteAllText("Languages/Polish.lng", ExtractResource.AsString("GameLauncher.Languages.Polish.lng")); File.WriteAllText("Languages/Portuguese.lng", ExtractResource.AsString("GameLauncher.Languages.Portuguese.lng")); File.WriteAllText("Languages/Spanish.lng", ExtractResource.AsString("GameLauncher.Languages.Spanish.lng")); File.WriteAllText("Languages/Swedish.lng", ExtractResource.AsString("GameLauncher.Languages.Swedish.lng")); } //Remove zip file try { File.Delete(Directory.GetCurrentDirectory() + "\\tempname.zip"); } catch { } //Console log with warning if (mono == true) { MessageBox.Show(null, "Mono support is still under alpha stage. Therefore, launcher could not launch.", "GameLauncher.exe", MessageBoxButtons.OK, MessageBoxIcon.Warning); } //Add LZMA.dll on the fly (used for decompression of section{int}.dll files) if (!File.Exists("LZMA.dll")) { File.WriteAllBytes("LZMA.dll", ExtractResource.AsByte("GameLauncher.LZMA.LZMA.dll")); } //Add GameLauncherUpdater.exe on the fly if (!File.Exists("GameLauncherUpdater.exe")) { File.WriteAllBytes("GameLauncherUpdater.exe", ExtractResource.AsByte("GameLauncher.Updater.GameLauncherUpdater.exe")); } //Detect if NFSW is launched if (NFSW.isNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } Mutex mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); //Forgot about other launchers... try { if (mutex.WaitOne(0, false)) { //First of all, we need to check if files exists String[] files = { "Newtonsoft.Json.dll", "LZMA.dll", "ICSharpCode.SharpZipLib.dll" }; List <string> missingfiles = new List <string>(); foreach (string file in files) { if (!File.Exists(file)) { missingfiles.Add(file); } } if (missingfiles.Count != 0) { string message = "Cannot launch GameLauncher. The following files are missing:\n\n"; foreach (string file in missingfiles) { message += "• " + file + "\n"; } message += "\nCurrent directory: " + Directory.GetCurrentDirectory(); message += "\nYou will be moved to the project page for re-download."; MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); Process.Start(@"https://github.com/SoapboxRaceWorld/GameLauncher_NFSW/releases"); Environment.Exit(1); } if (Environment.OSVersion.Version.Major >= 6) { User32.SetProcessDPIAware(); } //try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new mainScreen()); //} catch(Exception) { //Temporarely we gonna kill it. // Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); //} } else { MessageBox.Show(null, "An instance of the application is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { if (mutex != null) { mutex.Close(); mutex = null; } } }
private static void Main2(Arguments args) { if (!DetectLinux.LinuxDetected()) { //Check if User has .NETFramework 4.6.2 or later Installed const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"; using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)) { if (ndpKey != null && ndpKey.GetValue("Release") != null && (int)ndpKey.GetValue("Release") >= 394802) { /* Check Up to Date Certificate Status */ try { WebClient update_data = new WebClient(); update_data.CancelAsync(); update_data.Headers.Add("user-agent", "GameLauncher " + Application.ProductVersion + " (+https://github.com/SoapBoxRaceWorld/GameLauncher_NFSW)"); update_data.DownloadStringAsync(new Uri("http://crl.carboncrew.org/RCA-Info.json")); update_data.DownloadStringCompleted += (sender, e) => { JSONRootCA API = JsonConvert.DeserializeObject <JSONRootCA>(e.Result); if (API.CN != null) { Log.Info("CERTIFICATE STORE: Setting Common Name -> " + API.CN); CertificateStore.RootCACommonName = API.CN; } if (API.Subject != null) { Log.Info("CERTIFICATE STORE: Setting Subject Name -> " + API.Subject); CertificateStore.RootCASubjectName = API.Subject; } if (API.Ids != null) { foreach (IdsModel entries in API.Ids) { if (entries.Serial != null) { Log.Info("CERTIFICATE STORE: Setting Serial Number -> " + entries.Serial); CertificateStore.RootCASerial = entries.Serial; } } } if (API.File != null) { foreach (FileModel entries in API.File) { if (entries.Name != null) { Log.Info("CERTIFICATE STORE: Setting Root CA File Name -> " + entries.Name); CertificateStore.RootCAFileName = entries.Name; } if (entries.Cer != null) { Log.Info("CERTIFICATE STORE: Setting Root CA File URL -> " + entries.Cer); CertificateStore.RootCAFileURL = entries.Cer; } } } }; } catch { Log.Error("CERTIFICATE STORE: Unable to Retrive Latest Certificate Information"); } } else { DialogResult frameworkError = MessageBox.Show(null, "This application requires one of the following versions of the .NET Framework:\n" + " .NETFramework, Version=v4.6.2 \n\nDo you want to install this .NET Framework version now?", "GameLauncher.exe - This application could not be started.", MessageBoxButtons.YesNo, MessageBoxIcon.Error); if (frameworkError == DialogResult.Yes) { Process.Start("https://dotnet.microsoft.com/download/dotnet-framework"); } Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } } } File.Delete("communication.log"); File.Delete("launcher.log"); Log.StartLogging(); FileSettingsSave.NullSafeSettings(); FileAccountSave.NullSafeAccount(); Self.currentLanguage = CultureInfo.CurrentCulture.Name.Split('-')[0].ToUpper(); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US"); if (UriScheme.IsCommandLineArgumentsInstalled()) { UriScheme.InstallCommandLineArguments(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), AppDomain.CurrentDomain.FriendlyName)); if (args.Parse != null) { new UriScheme(args.Parse); } } if (EnableInsider.ShouldIBeAnInsider() == true) { Log.Build("INSIDER: GameLauncher " + Application.ProductVersion + "_" + EnableInsider.BuildNumber()); } else { Log.Build("BUILD: GameLauncher " + Application.ProductVersion); } if (Properties.Settings.Default.IsRestarting) { Properties.Settings.Default.IsRestarting = false; Properties.Settings.Default.Save(); Thread.Sleep(3000); } if (!DetectLinux.LinuxDetected()) { //Windows Firewall Runner if (!string.IsNullOrEmpty(FileSettingsSave.FirewallStatus)) { string nameOfLauncher = "SBRW - Game Launcher"; string localOfLauncher = Assembly.GetEntryAssembly().Location; string nameOfUpdater = "SBRW - Game Launcher Updater"; string localOfUpdater = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "GameLauncherUpdater.exe"); string groupKeyLauncher = "Game Launcher for Windows"; string descriptionLauncher = "Soapbox Race World"; bool removeFirewallRule = false; bool firstTimeRun = false; if (FileSettingsSave.FirewallStatus == "Not Excluded") { firstTimeRun = true; FileSettingsSave.FirewallStatus = "Excluded"; } else if (FileSettingsSave.FirewallStatus == "Reset") { removeFirewallRule = true; FileSettingsSave.FirewallStatus = "Not Excluded"; } FileSettingsSave.SaveSettings(); //Inbound & Outbound FirewallHelper.DoesRulesExist(removeFirewallRule, firstTimeRun, nameOfLauncher, localOfLauncher, groupKeyLauncher, descriptionLauncher, FirewallProtocol.Any); FirewallHelper.DoesRulesExist(removeFirewallRule, firstTimeRun, nameOfUpdater, localOfUpdater, groupKeyLauncher, descriptionLauncher, FirewallProtocol.Any); //This Removes the Game File Exe From Firewall //To Find the one that Adds the Exe To Firewall -> Search for `OnDownloadFinished()` string CurrentGameFilesExePath = Path.Combine(FileSettingsSave.GameInstallation + "\\nfsw.exe"); if (File.Exists(CurrentGameFilesExePath) && removeFirewallRule == true) { string nameOfGame = "SBRW - Game"; string localOfGame = CurrentGameFilesExePath; string groupKeyGame = "Need for Speed: World"; string descriptionGame = groupKeyGame; //Inbound & Outbound FirewallHelper.DoesRulesExist(removeFirewallRule, firstTimeRun, nameOfGame, localOfGame, groupKeyGame, descriptionGame, FirewallProtocol.Any); } } } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); VisualsAPIChecker.PingAPIStatus(); /* Set Launcher Directory */ Log.Info("CORE: Setting up current directory: " + Path.GetDirectoryName(Application.ExecutablePath)); Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath)); if (!DetectLinux.LinuxDetected()) { Log.Info("CORE: Checking current directory"); switch (Self.CheckFolder(Directory.GetCurrentDirectory())) { case FolderType.IsTempFolder: MessageBox.Show(null, "Please, extract me and my DLL files before executing...", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); break; case FolderType.IsUsersFolders: MessageBox.Show(null, "Please, choose a different directory for the game launcher.\n\nSpecial Folders such as:" + "\n\nDownloads, Documents, Desktop, Videos, Music, OneDrive, or Any Type of User Folders" + "\n\nAre Disadvised", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); break; case FolderType.IsProgramFilesFolder: MessageBox.Show(null, "Please, choose a different directory for the game launcher." + "\n\nSpecial Folders such as:\n\nProgram Files or Program Files (x86)\n\nAre Disadvised", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); break; case FolderType.IsWindowsFolder: MessageBox.Show(null, "Please, choose a different directory for the game launcher." + "\n\nSpecial Folder such as:\n\nWindows\n\nAre Disadvised", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); break; } if (!Self.HasWriteAccessToFolder(Path.GetDirectoryName(Application.ExecutablePath))) { MessageBox.Show("This application requires admin priviledge"); } //Update this text file if a new GameLauncherUpdater.exe has been delployed - DavidCarbon try { try { switch (APIStatusChecker.CheckStatus("http://api.github.com/repos/SoapboxRaceWorld/GameLauncherUpdater/releases/latest")) { case API.Online: WebClient update_data = new WebClient(); update_data.CancelAsync(); update_data.Headers.Add("user-agent", "GameLauncher " + Application.ProductVersion + " (+https://github.com/SoapBoxRaceWorld/GameLauncher_NFSW)"); update_data.DownloadStringAsync(new Uri("http://api.github.com/repos/SoapboxRaceWorld/GameLauncherUpdater/releases/latest")); update_data.DownloadStringCompleted += (sender, e) => { GitHubRelease GHAPI = JsonConvert.DeserializeObject <GitHubRelease>(e.Result); if (GHAPI.TagName != null) { Log.Info("LAUNCHER UPDATER: Setting Latest Version -> " + GHAPI.TagName); LatestUpdaterBuildVersion = GHAPI.TagName; } Log.Info("LAUNCHER UPDATER: Latest Version -> " + LatestUpdaterBuildVersion); }; break; default: Log.Error("LAUNCHER UPDATER: Failed to Retrive Latest Updater Information from GitHub"); break; } } catch { var GetLatestUpdaterBuildVersion = new WebClient().DownloadString(Self.secondstaticapiserver + "/Version.txt"); if (!string.IsNullOrEmpty(GetLatestUpdaterBuildVersion)) { Log.Info("LAUNCHER UPDATER: Setting Latest Version -> " + GetLatestUpdaterBuildVersion); LatestUpdaterBuildVersion = GetLatestUpdaterBuildVersion; } } Log.Info("LAUNCHER UPDATER: Fail Safe Latest Version -> " + LatestUpdaterBuildVersion); } catch (Exception ex) { Log.Error("LAUNCHER UPDATER: Failed to get new version file: " + ex.Message); } } if (!DetectLinux.LinuxDetected()) { //Windows 7 Fix if ((string.IsNullOrEmpty(FileSettingsSave.Win7UpdatePatches) && WindowsProductVersion.GetWindowsNumber() == 6.1) || FileSettingsSave.Win7UpdatePatches == "0") { if (Self.GetInstalledHotFix("KB3020369") == false || Self.GetInstalledHotFix("KB3125574") == false) { String messageBoxPopupKB = String.Empty; messageBoxPopupKB = "Hey Windows 7 User, we've detected a potential issue of some missing Updates that are required.\n"; messageBoxPopupKB += "We found that these Windows Update packages are showing as not installed:\n\n"; if (Self.GetInstalledHotFix("KB3020369") == false) { messageBoxPopupKB += "- Update KB3020369\n"; } if (Self.GetInstalledHotFix("KB3125574") == false) { messageBoxPopupKB += "- Update KB3125574\n"; } messageBoxPopupKB += "\nAditionally, we must add a value to the registry:\n"; messageBoxPopupKB += "- HKLM/SYSTEM/CurrentControlSet/Control/SecurityProviders\n/SCHANNEL/Protocols/TLS 1.2/Client\n"; messageBoxPopupKB += "- Value: DisabledByDefault -> 0\n\n"; messageBoxPopupKB += "Would you like to add those values?"; DialogResult replyPatchWin7 = MessageBox.Show(null, messageBoxPopupKB, "SBRW Launcher", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (replyPatchWin7 == DialogResult.Yes) { RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"); key.SetValue("DisabledByDefault", 0x0); MessageBox.Show(null, "Registry option set, Remember that the changes may require a system reboot to take effect", "SBRW Launcher", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show(null, "Roger that, There may be some issues connecting to the servers.", "SBRW Launcher", MessageBoxButtons.OK, MessageBoxIcon.Warning); } FileSettingsSave.Win7UpdatePatches = "1"; FileSettingsSave.SaveSettings(); } } if (!RedistributablePackage.IsInstalled(RedistributablePackageVersion.VC2015to2019x86)) { var result = MessageBox.Show( "You do not have the 32-bit 2015-2019 VC++ Redistributable Package installed.\n \nThis will install in the Background\n \nThis may restart your computer. \n \nClick OK to install it.", "Compatibility", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result != DialogResult.OK) { MessageBox.Show("The game will not be started.", "Compatibility", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var wc = new WebClient(); wc.DownloadFile("https://aka.ms/vs/16/release/VC_redist.x86.exe", "VC_redist.x86.exe"); var proc = Process.Start(new ProcessStartInfo { Verb = "runas", Arguments = "/quiet", FileName = "VC_redist.x86.exe" }); if (proc == null) { MessageBox.Show("Failed to run package installer. The game will not be started.", "Compatibility", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } if (Environment.Is64BitOperatingSystem == true) { if (!RedistributablePackage.IsInstalled(RedistributablePackageVersion.VC2015to2019x64)) { var result = MessageBox.Show( "You do not have the 64-bit 2015-2019 VC++ Redistributable Package installed.\n \nThis will install in the Background\n \nThis may restart your computer. \n \nClick OK to install it.", "Compatibility", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result != DialogResult.OK) { MessageBox.Show("The game will not be started.", "Compatibility", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var wc = new WebClient(); wc.DownloadFile("https://aka.ms/vs/16/release/VC_redist.x64.exe", "VC_redist.x64.exe"); var proc = Process.Start(new ProcessStartInfo { Verb = "runas", Arguments = "/quiet", FileName = "VC_redist.x64.exe" }); if (proc == null) { MessageBox.Show("Failed to run package installer. The game will not be started.", "Compatibility", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } } Console.WriteLine("Application path: " + Path.GetDirectoryName(Application.ExecutablePath)); if (!string.IsNullOrEmpty(FileSettingsSave.GameInstallation)) { if (!Self.HasWriteAccessToFolder(FileSettingsSave.GameInstallation)) { MessageBox.Show("This application requires admin priviledge. Restarting..."); } } //INFO: this is here because this dll is necessary for downloading game files and I want to make it async. //Updated RedTheKitsune Code so it downloads the file if its missing. It also restarts the launcher if the user click on yes on Prompt. - DavidCarbon if (!File.Exists("LZMA.dll")) { try { Log.Warning("CORE: Starting LZMA downloader"); using (WebClient wc = new WebClient()) { wc.DownloadFileAsync(new Uri(Self.fileserver + "/LZMA.dll"), "LZMA.dll"); } DialogResult restartApp = MessageBox.Show(null, "Downloaded Missing LZMA.dll File. \nPlease Restart Launcher, Thanks!", "GameLauncher Restart Required", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (restartApp == DialogResult.Yes) { Properties.Settings.Default.IsRestarting = true; Properties.Settings.Default.Save(); Application.Restart(); } Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } catch (Exception ex) { Log.Error("CORE: Failed to download LZMA. " + ex.Message); } } //StaticConfiguration.DisableErrorTraces = false; if (!File.Exists("servers.json")) { try { File.WriteAllText("servers.json", "[]"); } catch { /* ignored */ } } if (Properties.Settings.Default.IsRestarting) { Properties.Settings.Default.IsRestarting = false; Properties.Settings.Default.Save(); Thread.Sleep(3000); } ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; if (Debugger.IsAttached) { ShowMainScreen(); } else { if (NFSW.IsNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } var mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); try { if (mutex.WaitOne(0, false)) { string[] files = { "CommandLine.dll - 2.8.0", "DiscordRPC.dll - 1.0.169.0", "Flurl.dll - 3.0.1", "Flurl.Http.dll - 3.0.1", "INIFileParser.dll - 2.5.2", "LZMA.dll - 9.10 beta", "Microsoft.WindowsAPICodePack.dll - 1.1.0.0", "Microsoft.WindowsAPICodePack.Shell.dll - 1.1.0.0", "Microsoft.WindowsAPICodePack.ShellExtensions.dll - 1.1.0.0", "Nancy.dll - 2.0.0", "Nancy.Hosting.Self.dll - 2.0.0", "Newtonsoft.Json.dll - 12.0.3", "System.Runtime.InteropServices.RuntimeInformation.dll - 4.6.24705.01. Commit Hash: 4d1af962ca0fede10beb01d197367c2f90e92c97", "System.ValueTuple.dll - 4.6.26515.06 @BuiltBy: dlab-DDVSOWINAGE059 @Branch: release/2.1 @SrcCode: https://github.com/dotnet/corefx/tree/30ab651fcb4354552bd4891619a0bdd81e0ebdbf", "WindowsFirewallHelper.dll - 1.6.3.40" }; var missingfiles = new List <string>(); if (!DetectLinux.LinuxDetected()) { //MONO Hates that... foreach (var file in files) { var splitFileVersion = file.Split(new string[] { " - " }, StringSplitOptions.None); if (!File.Exists(Directory.GetCurrentDirectory() + "\\" + splitFileVersion[0])) { missingfiles.Add(splitFileVersion[0] + " - Not Found"); } else { try { var versionInfo = FileVersionInfo.GetVersionInfo(splitFileVersion[0]); string[] versionsplit = versionInfo.ProductVersion.Split('+'); string version = versionsplit[0]; if (version == "") { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } else { if (Self.CheckArchitectureFile(splitFileVersion[0]) == false) { missingfiles.Add(splitFileVersion[0] + " - Wrong Architecture"); } else { if (version != splitFileVersion[1]) { missingfiles.Add(splitFileVersion[0] + " - Invalid Version (" + splitFileVersion[1] + " != " + version + ")"); } } } } catch { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } } } } if (missingfiles.Count != 0) { ShowSplashScreen(false); var message = "Cannot launch GameLauncher. The following files are invalid:\n\n"; foreach (var file in missingfiles) { message += "• " + file + "\n"; } MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { Theming.CheckIfThemeExists(); ShowSplashScreen(true); } } else { ShowSplashScreen(false); MessageBox.Show(null, "An instance of Launcher is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { mutex.Close(); mutex = null; } } }
private static void ShowMainScreen() { if (VisualsAPIChecker.WOPLAPI == false) { DialogResult restartAppNoApis = MessageBox.Show(null, "There's no internet connection, Launcher might crash \n \nClick Yes to Close Launcher \nor \nClick No Continue", "GameLauncher has Stopped, Failed To Connect To API", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (restartAppNoApis == DialogResult.No) { MessageBox.Show("Good Luck... \n No Really \n ...Good Luck", "GameLauncher Will Continue, When It Failed To Connect To API"); Log.Warning("PRE-CHECK: User has Bypassed 'No Internet Connection' Check and Will Continue"); } if (restartAppNoApis == DialogResult.Yes) { Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } } ServerListUpdater.GetList(); CDNListUpdater.GetList(); LauncherUpdateCheck.CheckAvailability(); if (!DetectLinux.LinuxDetected()) { //Install Custom Root Certificate CertificateStore.Check(); if (!File.Exists("GameLauncherUpdater.exe")) { Log.Info("LAUNCHER UPDATER: Starting GameLauncherUpdater downloader"); try { using (WebClient wc = new WebClient()) { wc.DownloadFileCompleted += (object sender, AsyncCompletedEventArgs e) => { if (new FileInfo("GameLauncherUpdater.exe").Length == 0) { File.Delete("GameLauncherUpdater.exe"); } }; wc.DownloadFile(new Uri("https://github.com/SoapboxRaceWorld/GameLauncherUpdater/releases/latest/download/GameLauncherUpdater.exe"), "GameLauncherUpdater.exe"); } } catch (Exception ex) { Log.Error("LAUCHER UPDATER: Failed to download updater. " + ex.Message); } } else if (File.Exists("GameLauncherUpdater.exe")) { String GameLauncherUpdaterLocation = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GameLauncherUpdater.exe"); var LauncherUpdaterBuild = FileVersionInfo.GetVersionInfo(GameLauncherUpdaterLocation); var LauncherUpdaterBuildNumber = LauncherUpdaterBuild.FileVersion; var UpdaterBuildNumberResult = LauncherUpdaterBuildNumber.CompareTo(LatestUpdaterBuildVersion); Log.Build("LAUNCHER UPDATER BUILD: GameLauncherUpdater " + LauncherUpdaterBuildNumber); if (UpdaterBuildNumberResult < 0) { Log.Info("LAUNCHER UPDATER: " + UpdaterBuildNumberResult + " Builds behind latest Updater!"); } else { Log.Info("LAUNCHER UPDATER: Latest GameLauncherUpdater!"); } if (UpdaterBuildNumberResult < 0) { Log.Info("LAUNCHER UPDATER: Downloading New GameLauncherUpdater.exe"); File.Delete("GameLauncherUpdater.exe"); try { using (WebClient wc = new WebClient()) { wc.DownloadFile(new Uri("https://github.com/SoapboxRaceWorld/GameLauncherUpdater/releases/latest/download/GameLauncherUpdater.exe"), "GameLauncherUpdater.exe"); } } catch (Exception ex) { Log.Error("LAUNCHER UPDATER: Failed to download new updater. " + ex.Message); } } } } if (!string.IsNullOrEmpty(FileSettingsSave.GameInstallation)) { var linksPath = Path.Combine(FileSettingsSave.GameInstallation + "\\.links"); ModNetLinksCleanup.CleanLinks(linksPath); } Log.Info("PROXY: Starting Proxy"); ServerProxy.Instance.Start(); Log.Visuals("CORE: Starting MainScreen"); Application.Run(new MainScreen()); }
internal static void Main() { File.Delete("log.txt"); Log.StartLogging(); Log.Debug("Setting up current directory: " + Path.GetDirectoryName(Application.ExecutablePath)); Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath)); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); Form SplashScreen2 = null; Log.Debug("Checking current directory"); if (Self.isTempFolder(Directory.GetCurrentDirectory())) { MessageBox.Show(null, "Please, extract me and my DLL files before executing...", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); } if (!File.Exists("GameLauncherUpdater.exe")) { Log.Debug("Starting GameLauncherUpdater downloader"); try { using (WebClientWithTimeout wc = new WebClientWithTimeout()) { wc.DownloadFileCompleted += (object sender, AsyncCompletedEventArgs e) => { if (new FileInfo("GameLauncherUpdater.exe").Length == 0) { File.Delete("GameLauncherUpdater.exe"); } }; wc.DownloadFileAsync(new Uri(Self.mainserver + "/files/GameLauncherUpdater.exe"), "GameLauncherUpdater.exe"); } } catch (Exception ex) { Log.Debug("Failed to download updater. " + ex.Message); } } if (!File.Exists("servers.json")) { try { File.WriteAllText("servers.json", "[]"); } catch { /* ignored */ } } ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; if (Debugger.IsAttached) { Log.Debug("Checking Proxy"); ServerProxy.Instance.Start(); Log.Debug("Starting MainScreen"); Application.Run(new MainScreen(SplashScreen2)); } else { if (NFSW.isNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } var mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); try { if (mutex.WaitOne(0, false)) { string[] files = { "SharpRaven.dll - 2.4.0", "Flurl.dll - 2.8.0", "Flurl.Http.dll - 2.3.2", "INIFileParser.dll - 2.5.2", "Microsoft.WindowsAPICodePack.dll - 1.1.0.0", "Microsoft.WindowsAPICodePack.Shell.dll - 1.1.0.0", "Nancy.dll - 1.4.4", "Nancy.Hosting.Self.dll - 1.4.1", "Newtonsoft.Json.dll - 11.0.2", }; var missingfiles = new List <string>(); if (!DetectLinux.LinuxDetected()) //MONO Hates that... { foreach (var file in files) { var splitFileVersion = file.Split(new string[] { " - " }, StringSplitOptions.None); if (!File.Exists(Directory.GetCurrentDirectory() + "\\" + splitFileVersion[0])) { missingfiles.Add(splitFileVersion[0] + " - Not Found"); } else { try { var versionInfo = FileVersionInfo.GetVersionInfo(splitFileVersion[0]); string[] versionsplit = versionInfo.ProductVersion.Split('+'); string version = versionsplit[0]; if (version == "") { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } else { if (Self.CheckArchitectureFile(splitFileVersion[0]) == false) { missingfiles.Add(splitFileVersion[0] + " - Wrong Architecture"); } else { if (version != splitFileVersion[1]) { missingfiles.Add(splitFileVersion[0] + " - Invalid Version (" + splitFileVersion[1] + " != " + version + ")"); } } } } catch { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } } } } if (missingfiles.Count != 0) { var message = "Cannot launch GameLauncher. The following files are invalid:\n\n"; foreach (var file in missingfiles) { message += "• " + file + "\n"; } MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { Log.Debug("Checking Proxy"); ServerProxy.Instance.Start(); Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionEventHandler); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionEventHandler); Log.Debug("Starting MainScreen"); Application.Run(new MainScreen(SplashScreen2)); } } else { MessageBox.Show(null, "An instance of the application is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { mutex.Close(); mutex = null; } } }
private void DebugWindow_Load(object sender, EventArgs e) { data.AutoGenerateColumns = true; string Password = (!String.IsNullOrEmpty(FileAccountSave.UserHashedPassword)) ? "True" : "False"; string ProxyStatus = (!String.IsNullOrEmpty(FileSettingsSave.Proxy)) ? "False" : "True"; string RPCStatus = (!String.IsNullOrEmpty(FileSettingsSave.RPC)) ? "False" : "True"; string Antivirus = String.Empty; string Firewall = String.Empty; string AntiSpyware = String.Empty; if (!DetectLinux.LinuxDetected()) { try { Antivirus = (String.IsNullOrEmpty(AntivirusInstalled())) ? "---" : AntivirusInstalled(); Firewall = (String.IsNullOrEmpty(AntivirusInstalled("FirewallProduct"))) ? "Built-In" : AntivirusInstalled("FirewallProduct"); AntiSpyware = (String.IsNullOrEmpty(AntivirusInstalled("AntiSpywareProduct"))) ? "---" : AntivirusInstalled("AntiSpywareProduct"); } catch { Antivirus = "Unknown"; Firewall = "Unknown"; AntiSpyware = "Unknown"; } } string OS = ""; if (DetectLinux.LinuxDetected()) { OS = DetectLinux.Distro(); } else { OS = Environment.OSVersion.VersionString; } string UpdateSkip = ""; if (FileSettingsSave.IgnoreVersion == Application.ProductVersion || FileSettingsSave.IgnoreVersion == String.Empty) { UpdateSkip = "False"; } else { UpdateSkip = FileSettingsSave.IgnoreVersion; } string FirewallRuleStatus = ""; if (String.IsNullOrEmpty(FileSettingsSave.FirewallStatus)) { FirewallRuleStatus = "Not Exlcuded"; } else { FirewallRuleStatus = FileSettingsSave.FirewallStatus; } long memKb = 0; ulong lpFreeBytesAvailable = 0; List <string> GPUs = new List <string>(); string Win32_Processor = ""; if (!DetectLinux.LinuxDetected()) { Kernel32.GetPhysicallyInstalledSystemMemory(out memKb); ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_VideoController"); string graphicsCard = string.Empty; foreach (ManagementObject mo in searcher.Get()) { foreach (PropertyData property in mo.Properties) { GPUs.Add(property.Value.ToString()); } } Win32_Processor = (from x in new ManagementObjectSearcher("SELECT Name FROM Win32_Processor").Get().Cast <ManagementObject>() select x.GetPropertyValue("Name")).FirstOrDefault().ToString(); Kernel32.GetDiskFreeSpaceEx(FileSettingsSave.GameInstallation, out lpFreeBytesAvailable, out ulong lpTotalNumberOfBytes, out ulong lpTotalNumberOfFreeBytes); } var Win32_VideoController = string.Join(" | ", GPUs); var settings = new List <ListType> { new ListType { Name = "InstallationDirectory", Value = FileSettingsSave.GameInstallation }, new ListType { Name = "Launcher Version", Value = Application.ProductVersion }, new ListType { Name = "Credentials Saved", Value = Password }, new ListType { Name = "Language", Value = FileSettingsSave.Lang }, new ListType { Name = "Skipping Update", Value = UpdateSkip }, new ListType { Name = "Disable Proxy", Value = ProxyStatus }, new ListType { Name = "Disable RPC", Value = RPCStatus }, new ListType { Name = "Firewall Rule", Value = FirewallRuleStatus }, new ListType { Name = "", Value = "" }, new ListType { Name = "Server Name", Value = ServerName }, new ListType { Name = "Server Address", Value = ServerIP }, new ListType { Name = "CDN Address", Value = FileSettingsSave.CDN }, new ListType { Name = "ProxyPort", Value = Self.ProxyPort.ToString() }, new ListType { Name = "", Value = "" }, }; if (!DetectLinux.LinuxDetected()) { settings.AddRange(new[] { new ListType { Name = "Antivirus", Value = Antivirus }, new ListType { Name = "Firewall Application", Value = Firewall }, new ListType { Name = "AntiSpyware", Value = AntiSpyware }, new ListType { Name = "", Value = "" }, new ListType { Name = "CPU", Value = Win32_Processor }, new ListType { Name = "GPU", Value = Win32_VideoController }, new ListType { Name = "RAM", Value = (memKb / 1024).ToString() + "MB" }, new ListType { Name = "Disk Space Left", Value = FormatFileSize(lpFreeBytesAvailable) }, new ListType { Name = "", Value = "" } }); } settings.AddRange(new[] { new ListType { Name = "HWID", Value = Security.FingerPrint.Value() }, new ListType { Name = "Operating System", Value = OS }, new ListType { Name = "Environment Version", Value = Environment.OSVersion.Version.ToString() }, new ListType { Name = "Screen Resolution", Value = Screen.PrimaryScreen.Bounds.Width + "x" + Screen.PrimaryScreen.Bounds.Height } }); data.DataSource = settings; DataGridViewCellStyle style = new DataGridViewCellStyle { Font = new Font(data.Font, FontStyle.Regular) }; data.Columns[0].DefaultCellStyle = style; data.Columns[0].Width += 50; int size_x = 452; int size_y = 580; data.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.Size = new Size(size_x, size_y); }
private static void Main2(Arguments args) { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US"); if (UriScheme.IsCommandLineArgumentsInstalled()) { UriScheme.InstallCommandLineArguments(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), AppDomain.CurrentDomain.FriendlyName)); if (args.Parse != null) { new UriScheme(args.Parse); } } try { new WebClient().DownloadData("http://l.mtntr.pl/generate_204.php"); } catch (Exception) { MessageBox.Show("There's no internet connection, launcher might crash"); } IniFile _settingFile = new IniFile("Settings.ini"); if (!(_settingFile.KeyExists("PatchesApplied"))) { String _OS = (string)Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows NT\\CurrentVersion").GetValue("productName"); if (_OS.Contains("Windows 7")) { if (Self.getInstalledHotFix("KB3020369") == false || Self.getInstalledHotFix("KB3125574") == false) { String messageBoxPopupKB = String.Empty; messageBoxPopupKB = "Hey Windows 7 User, in order to play on this server, we need to make additional tweaks to your system.\n"; messageBoxPopupKB += "We must make sure you have those Windows Update packages installed:\n\n"; if (Self.getInstalledHotFix("KB3020369") == false) { messageBoxPopupKB += "- Update KB3020369\n"; } if (Self.getInstalledHotFix("KB3125574") == false) { messageBoxPopupKB += "- Update KB3125574\n"; } messageBoxPopupKB += "\nAditionally, we must add a value to the registry:\n"; messageBoxPopupKB += "- HKLM/SYSTEM/CurrentControlSet/Control/SecurityProviders\n/SCHANNEL/Protocols/TLS 1.2/Client\n"; messageBoxPopupKB += "- Value: DisabledByDefault -> 0\n\n"; messageBoxPopupKB += "Would you like to add those values?"; DialogResult replyPatchWin7 = MessageBox.Show(null, messageBoxPopupKB, "GameLauncherReborn", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (replyPatchWin7 == DialogResult.Yes) { RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"); key.SetValue("DisabledByDefault", 0x0); MessageBox.Show(null, "Registry option set, Remember that the following patch might work after a system reboot", "GameLauncherReborn", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show(null, "Roger that, There will be some issues connecting to the servers.", "GameLauncherReborn", MessageBoxButtons.OK, MessageBoxIcon.Warning); } _settingFile.Write("PatchesApplied", "1"); } } } Console.WriteLine("Application path: " + Path.GetDirectoryName(Application.ExecutablePath)); if (!Self.hasWriteAccessToFolder(Path.GetDirectoryName(Application.ExecutablePath))) { MessageBox.Show("This application requires admin priviledge"); } if (DetectLinux.LinuxDetected()) { if (!_settingFile.KeyExists("InstallationDirectory")) { _settingFile.Write("InstallationDirectory", "GameFiles"); } if (!_settingFile.KeyExists("CDN")) { try { List <CDNObject> CDNList = new List <CDNObject>(); WebClientWithTimeout wc3 = new WebClientWithTimeout(); String _slresponse = wc3.DownloadString(Self.CDNUrlList); CDNList = JsonConvert.DeserializeObject <List <CDNObject> >(_slresponse); _settingFile.Write("CDN", CDNList.First().url); } catch { _settingFile.Write("CDN", "http://cdn.worldunited.gg/gamefiles/packed/"); } } } if (!string.IsNullOrEmpty(_settingFile.Read("InstallationDirectory"))) { Console.WriteLine("Game path: " + _settingFile.Read("InstallationDirectory")); if (!Self.hasWriteAccessToFolder(_settingFile.Read("InstallationDirectory"))) { MessageBox.Show("This application requires admin priviledge. Restarting..."); } } File.Delete("communication.log"); File.Delete("launcher.log"); Log.StartLogging(); Log.Debug("GameLauncher " + Application.ProductVersion); if (_settingFile.KeyExists("InstallationDirectory")) { if (!File.Exists(_settingFile.Read("InstallationDirectory"))) { Directory.CreateDirectory(_settingFile.Read("InstallationDirectory")); } } //StaticConfiguration.DisableErrorTraces = false; Log.Debug("Setting up current directory: " + Path.GetDirectoryName(Application.ExecutablePath)); Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath)); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); Log.Debug("Checking current directory"); if (Self.isTempFolder(Directory.GetCurrentDirectory())) { MessageBox.Show(null, "Please, extract me and my DLL files before executing...", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); } String[] removeFiles = new String[] { "GameLauncherUpdater.exe", "Update.exe", "update.sbrw" }; foreach (string file in removeFiles) { if (File.Exists(file)) { File.Delete(file); } } //Also remove new one on next launch. if (File.Exists("Update.exe")) { File.Delete("GameLauncherUpdater.exe"); } if (!File.Exists("servers.json")) { try { File.WriteAllText("servers.json", "[]"); } catch { /* ignored */ } } if (Properties.Settings.Default.IsRestarting) { Properties.Settings.Default.IsRestarting = false; Properties.Settings.Default.Save(); Thread.Sleep(3000); } ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; if (Debugger.IsAttached) { Log.Debug("Checking Proxy"); ServerProxy.Instance.Start(); Log.Debug("Starting MainScreen"); Application.Run(new MainScreen()); } else { if (NFSW.isNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } var mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); try { if (mutex.WaitOne(0, false)) { string[] files = { "CommandLine.dll - 2.8.0", "DiscordRPC.dll - 1.0.150.0", "Flurl.dll - 2.8.2", "Flurl.Http.dll - 2.4.2", "INIFileParser.dll - 2.5.2", "Microsoft.WindowsAPICodePack.dll - 1.1.0.0", "Microsoft.WindowsAPICodePack.Shell.dll - 1.1.0.0", "Microsoft.WindowsAPICodePack.ShellExtensions.dll - 1.1.0.0", "Nancy.dll - 2.0.0", "Nancy.Hosting.Self.dll - 2.0.0", "Newtonsoft.Json.dll - 12.0.3", "System.Runtime.InteropServices.RuntimeInformation.dll - 4.6.24705.01. Commit Hash: 4d1af962ca0fede10beb01d197367c2f90e92c97" }; var missingfiles = new List <string>(); if (!DetectLinux.LinuxDetected()) //MONO Hates that... { foreach (var file in files) { var splitFileVersion = file.Split(new string[] { " - " }, StringSplitOptions.None); if (!File.Exists(Directory.GetCurrentDirectory() + "\\" + splitFileVersion[0])) { missingfiles.Add(splitFileVersion[0] + " - Not Found"); } else { try { var versionInfo = FileVersionInfo.GetVersionInfo(splitFileVersion[0]); string[] versionsplit = versionInfo.ProductVersion.Split('+'); string version = versionsplit[0]; if (version == "") { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } else { if (Self.CheckArchitectureFile(splitFileVersion[0]) == false) { missingfiles.Add(splitFileVersion[0] + " - Wrong Architecture"); } else { if (version != splitFileVersion[1]) { missingfiles.Add(splitFileVersion[0] + " - Invalid Version (" + splitFileVersion[1] + " != " + version + ")"); } } } } catch { missingfiles.Add(splitFileVersion[0] + " - Invalid File"); } } } } if (missingfiles.Count != 0) { var message = "Cannot launch GameLauncher. The following files are invalid:\n\n"; foreach (var file in missingfiles) { message += "• " + file + "\n"; } MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { Log.Debug("Checking Proxy"); ServerProxy.Instance.Start(); Log.Debug("Starting MainScreen"); Application.Run(new MainScreen()); } } else { MessageBox.Show(null, "An instance of Launcher is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { mutex.Close(); mutex = null; } } }
protected override WebRequest GetWebRequest(Uri address) { if (DetectLinux.LinuxDetected()) { address = new UriBuilder(address) { Scheme = Uri.UriSchemeHttp, Port = address.IsDefaultPort ? -1 : address.Port // -1 => default port for scheme }.Uri; } ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; ServicePointManager.Expect100Continue = true; ServicePointManager.ServerCertificateValidationCallback = (Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) => { bool isOk = true; if (sslPolicyErrors != SslPolicyErrors.None) { for (int i = 0; i < chain.ChainStatus.Length; i++) { if (chain.ChainStatus[i].Status == X509ChainStatusFlags.RevocationStatusUnknown) { continue; } chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0); chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; bool chainIsValid = chain.Build((X509Certificate2)certificate); if (!chainIsValid) { isOk = false; break; } } } return(isOk); }; if (!address.AbsolutePath.Contains("auth")) { Log.UrlCall("Calling URL: " + address); } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); request.UserAgent = "GameLauncher (+https://github.com/SoapBoxRaceWorld/GameLauncher_NFSW)"; request.Headers["X-HWID"] = Security.FingerPrint.Value(); request.Headers["X-UserAgent"] = "GameLauncherReborn " + Application.ProductVersion + " WinForms (+https://github.com/SoapBoxRaceWorld/GameLauncher_NFSW)"; request.Headers["X-GameLauncherHash"] = Value(); request.Headers["X-DiscordID"] = Self.discordid; if (addrange != 0) { request.AddRange(addrange); } request.Proxy = null; request.Timeout = timeout; return(request); }
public static void SaveSettings() { if (settingFile.Read("CDN") != CDN) { if (CDN.EndsWith("/")) { char[] charsToTrim = { '/' }; string FinalCDNURL = CDN.TrimEnd(charsToTrim); settingFile.Write("CDN", FinalCDNURL); } else { settingFile.Write("CDN", CDN); } } if (settingFile.Read("Language") != Lang) { settingFile.Write("Language", Lang); } if (settingFile.Read("DisableProxy") != Proxy) { settingFile.Write("DisableProxy", Proxy); } if (settingFile.Read("DisableRPC") != RPC) { settingFile.Write("DisableRPC", RPC); } if (settingFile.Read("InstallationDirectory") != GameInstallation) { settingFile.Write("InstallationDirectory", GameInstallation); } if (settingFile.Read("IgnoreUpdateVersion") != IgnoreVersion) { settingFile.Write("IgnoreUpdateVersion", IgnoreVersion); } if (!DetectLinux.LinuxDetected()) { if (settingFile.Read("Firewall") != FirewallStatus) { settingFile.Write("Firewall", FirewallStatus); } if (WindowsProductVersion.GetWindowsNumber() >= 10.0) { if (settingFile.Read("WindowsDefender") != WindowsDefenderStatus) { settingFile.Write("WindowsDefender", WindowsDefenderStatus); } } if ((settingFile.Read("PatchesApplied") != Win7UpdatePatches) && WindowsProductVersion.GetWindowsNumber() == 6.1) { settingFile.Write("PatchesApplied", Win7UpdatePatches); } } settingFile = new IniFile("Settings.ini"); }
private void DebugWindow_Load(object sender, EventArgs e) { data.AutoGenerateColumns = true; IniFile SettingFile = new IniFile("Settings.ini"); string UserSettings = Environment.ExpandEnvironmentVariables("%AppData%\\Need for Speed World\\Settings\\UserSettings.xml"); string TracksHigh = (SettingFile.Read("TracksHigh") == "1") ? "True" : "False"; string Password = (SettingFile.Read("Password") == "1") ? "True" : "False"; string SkipUpdate = (SettingFile.Read("SkipUpdate") == "1") ? "True" : "False"; string Antivirus = (String.IsNullOrEmpty(AntivirusInstalled())) ? "---" : AntivirusInstalled(); string Firewall = (String.IsNullOrEmpty(AntivirusInstalled("FirewallProduct"))) ? "---" : AntivirusInstalled("FirewallProduct"); string AntiSpyware = (String.IsNullOrEmpty(AntivirusInstalled("AntiSpywareProduct"))) ? "---" : AntivirusInstalled("AntiSpywareProduct"); string LauncherPosition = ""; var Win32_OperatingSystem = (from x in new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem").Get().Cast <ManagementObject>() select x.GetPropertyValue("Caption")).FirstOrDefault(); string OS = (DetectLinux.LinuxDetected()) ? "Linux" : Win32_OperatingSystem.ToString(); var Win32_Processor = (from x in new ManagementObjectSearcher("SELECT Name FROM Win32_Processor").Get().Cast <ManagementObject>() select x.GetPropertyValue("Name")).FirstOrDefault(); List <string> GPUs = new List <string>(); ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_VideoController"); string graphicsCard = string.Empty; foreach (ManagementObject mo in searcher.Get()) { foreach (PropertyData property in mo.Properties) { GPUs.Add(property.Value.ToString()); } } var Win32_VideoController = string.Join(" | ", GPUs); long memKb; GetPhysicallyInstalledSystemMemory(out memKb); if (SettingFile.Read("LauncherPosX") + "x" + SettingFile.Read("LauncherPosY") == "x") { LauncherPosition = "Windows Default Position"; } else { LauncherPosition = SettingFile.Read("LauncherPosX") + "x" + SettingFile.Read("LauncherPosY"); } Kernel32.GetDiskFreeSpaceEx(SettingFile.Read("InstallationDirectory"), out ulong lpFreeBytesAvailable, out ulong lpTotalNumberOfBytes, out ulong lpTotalNumberOfFreeBytes); var settings = new[] { new { Text = "InstallationDirectory", Value = SettingFile.Read("InstallationDirectory") }, new { Text = "Server", Value = SettingFile.Read("Server") }, new { Text = "Credentials Saved", Value = Password }, new { Text = "Language", Value = SettingFile.Read("Language") }, new { Text = "TracksHigh", Value = TracksHigh }, new { Text = "UILanguage", Value = SettingFile.Read("UILanguage") }, new { Text = "SkipUpdate", Value = SkipUpdate }, new { Text = "LauncherPos", Value = LauncherPosition }, new { Text = "", Value = "" }, new { Text = "Antivirus", Value = Antivirus }, new { Text = "Firewall", Value = Firewall }, new { Text = "AntiSpyware", Value = AntiSpyware }, new { Text = "", Value = "" }, new { Text = "Operating System", Value = OS }, new { Text = "CPU", Value = Win32_Processor.ToString() }, new { Text = "GPU", Value = Win32_VideoController.ToString() }, new { Text = "RAM", Value = (memKb / 1024).ToString() + "MB" }, new { Text = "Screen Resolution", Value = Screen.PrimaryScreen.Bounds.Width + "x" + Screen.PrimaryScreen.Bounds.Height }, new { Text = "Disk Space Left", Value = FormatFileSize(lpFreeBytesAvailable).ToString() }, }; data.DataSource = settings; DataGridViewCellStyle style = new DataGridViewCellStyle(); style.Font = new Font(data.Font, FontStyle.Bold); data.Columns[0].DefaultCellStyle = style; data.Columns[0].Width += 50; int size_x = data.Columns[0].Width + data.Columns[1].Width + 7; int size_y = 450; data.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.Size = new Size(size_x, size_y); }
public static void NullSafeSettings() { if (settingFile.KeyExists("Server")) { FileAccountSave.ChoosenGameServer = settingFile.Read("Server"); settingFile.DeleteKey("Server"); FileAccountSave.SaveAccount(); } if (settingFile.KeyExists("AccountEmail")) { FileAccountSave.UserRawEmail = settingFile.Read("AccountEmail"); settingFile.DeleteKey("AccountEmail"); FileAccountSave.SaveAccount(); } if (settingFile.KeyExists("Password")) { FileAccountSave.UserHashedPassword = settingFile.Read("Password"); settingFile.DeleteKey("Password"); FileAccountSave.SaveAccount(); } if (DetectLinux.LinuxDetected() && !settingFile.KeyExists("InstallationDirectory")) { settingFile.Write("InstallationDirectory", "GameFiles"); } else if (!settingFile.KeyExists("InstallationDirectory")) { settingFile.Write("InstallationDirectory", GameInstallation); } else if (!File.Exists(GameInstallation) && !string.IsNullOrEmpty(GameInstallation)) { Directory.CreateDirectory(GameInstallation); } if (!settingFile.KeyExists("CDN")) { settingFile.Write("CDN", CDN); } else if (settingFile.KeyExists("CDN")) { if (CDN.EndsWith("/")) { char[] charsToTrim = { '/' }; string FinalCDNURL = CDN.TrimEnd(charsToTrim); settingFile.Write("CDN", FinalCDNURL); } } if (!settingFile.KeyExists("Language")) { settingFile.Write("Language", Lang); } if (!settingFile.KeyExists("DisableProxy")) { settingFile.Write("DisableProxy", Proxy); } if (!settingFile.KeyExists("DisableRPC")) { settingFile.Write("DisableRPC", RPC); } if (!settingFile.KeyExists("IgnoreUpdateVersion")) { settingFile.Write("IgnoreUpdateVersion", IgnoreVersion); } if (!DetectLinux.LinuxDetected()) { if (!settingFile.KeyExists("Firewall")) { settingFile.Write("Firewall", FirewallStatus); } if (WindowsProductVersion.GetWindowsNumber() >= 10.0) { if (!settingFile.KeyExists("WindowsDefender")) { settingFile.Write("WindowsDefender", WindowsDefenderStatus); } } else if (WindowsProductVersion.GetWindowsNumber() < 10.0) { if (settingFile.KeyExists("WindowsDefender") || !string.IsNullOrEmpty(settingFile.Read("WindowsDefender"))) { settingFile.DeleteKey("WindowsDefender"); } } if (WindowsProductVersion.GetWindowsNumber() == 6.1 && !settingFile.KeyExists("PatchesApplied")) { settingFile.Write("PatchesApplied", Win7UpdatePatches); } else if (WindowsProductVersion.GetWindowsNumber() != 6.1 && settingFile.KeyExists("PatchesApplied")) { settingFile.DeleteKey("PatchesApplied"); } } /* Key Entries to Remove (No Longer Needed) */ if (settingFile.KeyExists("LauncherPosX")) { settingFile.DeleteKey("LauncherPosX"); } if (settingFile.KeyExists("LauncherPosY")) { settingFile.DeleteKey("LauncherPosY"); } if (settingFile.KeyExists("DisableVerifyHash")) { settingFile.DeleteKey("DisableVerifyHash"); } if (settingFile.KeyExists("TracksHigh")) { settingFile.DeleteKey("TracksHigh"); } if (settingFile.KeyExists("ModNetDisabled")) { settingFile.DeleteKey("ModNetDisabled"); } settingFile = new IniFile("Settings.ini"); }
static void Main() { int SysVersion = (int)Environment.OSVersion.Platform; bool mono = DetectLinux.MonoDetected(); bool wine = DetectLinux.WineDetected(); bool linux = DetectLinux.NativeLinuxDetected(); try { } catch { MessageBox.Show("This should fake antivirus :v"); } /*if(Environment.OSVersion.Version.Major <= 5 && !linux) { * MessageBox.Show(null, "Windows XP Support has been terminated. Please upgrade your Operating System to 'Vista' or newer.", "GameLauncher.exe", MessageBoxButtons.OK, MessageBoxIcon.Warning); * Environment.Exit(Environment.ExitCode); * }*/ Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath)); if (!Directory.Exists("Languages")) { Directory.CreateDirectory("Languages"); } try { File.Delete("Languages/Default.lng"); File.WriteAllText("Languages/Default.lng", ExtractResource.AsString("GameLauncher.Language.Default.lng")); } catch { } try { File.Delete(Directory.GetCurrentDirectory() + "\\tempname.zip"); } catch { } if (linux) { MessageBox.Show(null, "Native Linux support is still under alpha stage. Therefore, launcher or game could crash.", "GameLauncher.exe", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (mono == true) { MessageBox.Show(null, "Mono support is still under alpha stage. Therefore, launcher could not launch.", "GameLauncher.exe", MessageBoxButtons.OK, MessageBoxIcon.Warning); } if (!File.Exists("LZMA.dll")) { File.WriteAllBytes("LZMA.dll", ExtractResource.AsByte("GameLauncher.LZMA.LZMA.dll")); } if (!linux && !File.Exists("discord-rpc.dll")) { File.WriteAllBytes("discord-rpc.dll", ExtractResource.AsByte("GameLauncher.Discord.discord-rpc.dll")); } if (linux && !File.Exists("libdiscord-rpc.so")) { File.WriteAllBytes("libdiscord-rpc.so", ExtractResource.AsByte("GameLauncher.Discord.libdiscord-rpc.so")); } if (File.Exists("GameLauncherUpdater.exe")) { File.Delete("GameLauncherUpdater.exe"); } try { File.Delete("GL_Update.exe"); File.WriteAllBytes("GL_Update.exe", ExtractResource.AsByte("GameLauncher.Updater.GL_Update.exe")); } catch { } if (!File.Exists("servers.txt")) { try { File.Create("servers.txt"); } catch { } } if (Debugger.IsAttached) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new mainScreen()); } else { if (NFSW.isNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } Mutex mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); try { if (mutex.WaitOne(0, false)) { String[] files = { "Newtonsoft.Json.dll", "LZMA.dll" }; List <string> missingfiles = new List <string>(); foreach (string file in files) { if (!File.Exists(file)) { missingfiles.Add(file); } } if (missingfiles.Count != 0) { string message = "Cannot launch GameLauncher. The following files are missing:\n\n"; foreach (string file in missingfiles) { message += "• " + file + "\n"; } message += "\nCurrent directory: " + Directory.GetCurrentDirectory(); message += "\nYou will be moved to the project page for re-download."; MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); Process.Start(@"https://github.com/SoapboxRaceWorld/GameLauncher_NFSW/releases"); Environment.Exit(1); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new mainScreen()); } else { MessageBox.Show(null, "An instance of the application is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { if (mutex != null) { mutex.Close(); mutex = null; } } } }
static void Main() { bool mono = DetectLinux.MonoDetected(); bool wine = DetectLinux.WineDetected(); bool linux = DetectLinux.NativeLinuxDetected(); Directory.SetCurrentDirectory(Path.GetDirectoryName(Application.ExecutablePath)); if (Self.isTempFolder(Directory.GetCurrentDirectory())) { MessageBox.Show(null, "Please, extract me and my DLL files before executing...", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Stop); Environment.Exit(0); } if (!Directory.Exists("Languages")) { Directory.CreateDirectory("Languages"); } try { File.Delete("Languages/Default.lng"); File.WriteAllText("Languages/Default.lng", ExtractResource.AsString("GameLauncher.Language.Default.lng")); } catch { } try { File.Delete(Directory.GetCurrentDirectory() + "\\tempname.zip"); } catch { } if (!File.Exists("LZMA.dll")) { File.WriteAllBytes("LZMA.dll", ExtractResource.AsByte("GameLauncher.LZMA.LZMA.dll")); } if (!linux && !File.Exists("discord-rpc.dll")) { File.WriteAllBytes("discord-rpc.dll", ExtractResource.AsByte("GameLauncher.Discord.discord-rpc.dll")); } if (linux && !File.Exists("libdiscord-rpc.so")) { File.WriteAllBytes("libdiscord-rpc.so", ExtractResource.AsByte("GameLauncher.Discord.libdiscord-rpc.so")); } if (File.Exists("GameLauncherUpdater.exe")) { File.Delete("GameLauncherUpdater.exe"); } try { File.Delete("GL_Update.exe"); File.WriteAllBytes("GL_Update.exe", ExtractResource.AsByte("GameLauncher.Updater.GL_Update.exe")); } catch { } if (!File.Exists("servers.txt")) { try { File.Create("servers.txt"); } catch { } } if (Debugger.IsAttached) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new mainScreen()); } else { if (NFSW.isNFSWRunning()) { MessageBox.Show(null, "An instance of Need for Speed: World is already running", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Process.GetProcessById(Process.GetCurrentProcess().Id).Kill(); } Mutex mutex = new Mutex(false, "GameLauncherNFSW-MeTonaTOR"); try { if (mutex.WaitOne(0, false)) { String[] files = { "Newtonsoft.Json.dll", "INIFileParser.dll", "Microsoft.WindowsAPICodePack.dll", "Microsoft.WindowsAPICodePack.Shell.dll" }; List <string> missingfiles = new List <string>(); foreach (string file in files) { if (!File.Exists(file)) { missingfiles.Add(file); } } if (missingfiles.Count != 0) { string message = "Cannot launch GameLauncher. The following files are missing:\n\n"; foreach (string file in missingfiles) { message += "• " + file + "\n"; } message += "\nCurrent directory: " + Directory.GetCurrentDirectory(); MessageBox.Show(null, message, "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(1); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new mainScreen()); } else { MessageBox.Show(null, "An instance of the application is already running.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { if (mutex != null) { mutex.Close(); mutex = null; } } } }
private void SetVisuals() { /*******************************/ /* Set Font / * /*******************************/ FontFamily DejaVuSans = FontWrapper.Instance.GetFontFamily("DejaVuSans.ttf"); FontFamily DejaVuSansBold = FontWrapper.Instance.GetFontFamily("DejaVuSans-Bold.ttf"); var MainFontSize = 10f * 100f / CreateGraphics().DpiY; var SecondaryFontSize = 15f * 100f / CreateGraphics().DpiY; var ThirdFontSize = 26f * 100f / CreateGraphics().DpiY; //var FourthFontSize = 14f * 100f / CreateGraphics().DpiY; if (DetectLinux.LinuxDetected()) { MainFontSize = 10f; SecondaryFontSize = 15f; ThirdFontSize = 26f; //FourthFontSize = 14f; } Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); AboutText.Font = new Font(DejaVuSansBold, ThirdFontSize, FontStyle.Bold); PatchTitle1.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); PatchText1.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); PatchButton1.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); PatchTitle2.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); PatchText2.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); PatchButton2.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); PatchTitle3.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); PatchText3.Font = new Font(DejaVuSans, MainFontSize, FontStyle.Regular); PatchButton3.Font = new Font(DejaVuSans, SecondaryFontSize, FontStyle.Regular); /********************************/ /* Set Theme Colors / * /********************************/ AboutText.ForeColor = Theming.WinFormTextForeColor; BackColor = Theming.WinFormTBGForeColor; ForeColor = Theming.WinFormTextForeColor; PatchContainerPanel.BackColor = Theming.WinFormTBGForeColor; PatchContainerPanel.ForeColor = Theming.WinFormTextForeColor; PatchText1.BackColor = Theming.AboutBGForeColor; PatchText1.ForeColor = Theming.AboutTextForeColor; PatchText2.BackColor = Theming.AboutBGForeColor; PatchText2.ForeColor = Theming.AboutTextForeColor; PatchText3.BackColor = Theming.AboutBGForeColor; PatchText3.ForeColor = Theming.AboutTextForeColor; PatchButton1.ForeColor = Theming.BlueForeColorButton; PatchButton1.BackColor = Theming.BlueBackColorButton; PatchButton1.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; PatchButton1.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; PatchButton2.ForeColor = Theming.BlueForeColorButton; PatchButton2.BackColor = Theming.BlueBackColorButton; PatchButton2.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; PatchButton2.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; PatchButton3.ForeColor = Theming.BlueForeColorButton; PatchButton3.BackColor = Theming.BlueBackColorButton; PatchButton3.FlatAppearance.BorderColor = Theming.BlueBorderColorButton; PatchButton3.FlatAppearance.MouseOverBackColor = Theming.BlueMouseOverBackColorButton; }