/// <summary> /// /// </summary> /// <param name="args"></param> /// <returns>True if DS should exit</returns> public static bool ProcessArgs(string[] args) { if (args.Contains("-report")) { if (args.Count() > 1) { MyErrorReporter.ReportNotInteractive(args[1], "SEDS"); } return(true); } MySandboxGame.IsDedicated = true; string customPath = null; if (args.Contains("-ignorelastsession")) { MySandboxGame.IgnoreLastSession = true; } Environment.SetEnvironmentVariable("SteamAppId", MyPerServerSettings.AppId.ToString()); if (args.Contains("-maxPlayers")) { int index = args.ToList().IndexOf("-maxPlayers"); if (index + 1 < args.Length) { string maxPlayersString = args[index + 1]; int maxPlayers = 0; if (int.TryParse(maxPlayersString, out maxPlayers)) { MyDedicatedServerOverrides.MaxPlayers = maxPlayers; } } } if (args.Contains("-ip")) { int index = args.ToList().IndexOf("-ip"); if (index + 1 < args.Length) { IPAddress.TryParse(args[index + 1], out MyDedicatedServerOverrides.IpAddress); } } if (args.Contains("-port")) { int index = args.ToList().IndexOf("-port"); if (index + 1 < args.Length) { string portString = args[index + 1]; int port; if (int.TryParse(portString, out port)) { MyDedicatedServerOverrides.Port = port; } } } if (args.Contains("-path")) { int index = args.ToList().IndexOf("-path"); if (index + 1 < args.Length) { string path = args[index + 1]; path = path.Trim('"'); bool isAbsolutePath = false; if (path.Length > 1 && path[1] == ':') { isAbsolutePath = true; } if (isAbsolutePath) { if (!System.IO.Directory.Exists(path)) { return(true); } } else { string dirname = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); path = Path.Combine(dirname, path); if (!System.IO.Directory.Exists(path)) { return(true); } } customPath = path; } else { return(true); } } if (args.Contains("-console")) { RunMain("Default", customPath, false); return(true); } if (args.Contains("-noconsole")) { RunMain("Default", customPath, false, false); return(true); } return(false); }
// Main method static void Main(string[] args) { if (args.Contains("-report")) { MyErrorReporter.Report(args[1], args[2], "SE", MyErrorReporter.APP_ERROR_MESSAGE); return; } if (MyFakes.ENABLE_CONNECT_COMMAND_LINE && args.Contains("+connect")) { int index = args.ToList().IndexOf("+connect"); if ((index + 1) < args.Length) { if (IPAddressExtensions.TryParseEndpoint(args[index + 1], out MySandboxGame.ConnectToServer)) { Console.WriteLine("Space engineers " + MyFinalBuildConstants.APP_VERSION_STRING); Console.WriteLine("Obfuscated: " + MyObfuscation.Enabled + ", Platform: " + (Environment.Is64BitProcess ? " 64-bit" : " 32-bit")); Console.WriteLine("Connecting to: " + args[index + 1]); } } } MySingleProgramInstance spi = new MySingleProgramInstance(MyFileSystem.MainAssemblyName); if (spi.IsSingleInstance == false) { MyErrorReporter.ReportAppAlreadyRunning("Space Engineers"); return; } MyInitializer.InvokeBeforeRun( AppId, "SpaceEngineers", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "SpaceEngineers")); MyInitializer.InitCheckSum(); if (!args.Contains("-nosplash")) { InitSplashScreen(); } // This won't crash with BadFormatExpection when 64-bit game started as 32-bit process, it will show message // Will uncomment when it's possible to test it if (!Environment.Is64BitProcess && AssemblyExtensions.TryGetArchitecture("SteamSDK.dll") == ProcessorArchitecture.Amd64) { string text = "Space Engineers cannot be started in 64-bit mode, "; text += "because 64-bit version of .NET framework is not available or is broken." + Environment.NewLine + Environment.NewLine; text += "Do you want to open website with more information about this particular issue?" + Environment.NewLine + Environment.NewLine; text += "Press Yes to open website with info" + Environment.NewLine; text += "Press No to run in 32-bit mode (smaller potential of Space Engineers!)" + Environment.NewLine; text += "Press Cancel to close this dialog"; var result = Sandbox.MyMessageBox.Show(IntPtr.Zero, text, ".NET Framework 64-bit error", Sandbox.MessageBoxOptions.YesNoCancel); if (result == MessageBoxResult.Yes) { MyBrowserHelper.OpenInternetBrowser("http://www.spaceengineersgame.com/64-bit-start-up-issue.html"); } else if (result == MessageBoxResult.No) { var entry = Assembly.GetEntryAssembly().Location; string x86Exe = Path.Combine(new FileInfo(entry).Directory.Parent.FullName, "Bin", Path.GetFileName(entry)); ProcessStartInfo pi = new ProcessStartInfo(); pi.FileName = x86Exe; pi.WorkingDirectory = Path.GetDirectoryName(x86Exe); pi.Arguments = "-fallback"; pi.UseShellExecute = false; pi.WindowStyle = ProcessWindowStyle.Normal; var p = Process.Start(pi); } return; } if (MyFakes.DETECT_LEAKS) { //Slow down SharpDX.Configuration.EnableObjectTracking = true; //SharpDX.Diagnostics.ObjectTracker.OnObjectCreated += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnResourceCreated); //SharpDX.Diagnostics.ObjectTracker.OnObjectReleased += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnResourceDestroyed); //SharpDX.Diagnostics.ObjectTracker.OnObjectTrack += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnObjectTrack); //SharpDX.Diagnostics.ObjectTracker.OnObjectUnTrack += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnObjectUnTrack); } RunInternal(args); if (MyFakes.DETECT_LEAKS) { var o = SharpDX.Diagnostics.ObjectTracker.FindActiveObjects(); System.Diagnostics.Debug.Assert(o.Count == 0, "Unreleased DX objects!"); Console.WriteLine(SharpDX.Diagnostics.ObjectTracker.ReportActiveObjects()); } #if PROFILING MyPerformanceTimer.WriteToLog(); #endif MyInitializer.InvokeAfterRun(); }