diff --git a/OpenRA.FileFormats/Platform.cs b/OpenRA.FileFormats/Platform.cs index 352f36ae7d..93ce4479bb 100644 --- a/OpenRA.FileFormats/Platform.cs +++ b/OpenRA.FileFormats/Platform.cs @@ -11,6 +11,7 @@ using System; using System.Diagnostics; using System.IO; +using System.Reflection; using OpenRA.FileFormats; namespace OpenRA @@ -45,6 +46,22 @@ namespace OpenRA return PlatformType.Unknown; } + public static string RuntimeVersion + { + get + { + var mono = Type.GetType("Mono.Runtime"); + if (mono == null) + return ".NET CLR {0}".F(Environment.Version); + + var version = mono.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); + if (version == null) + return "Mono (unknown version) CLR {0}".F(Environment.Version); + + return "Mono {0} CLR {1}".F(version.Invoke(null, null), Environment.Version); + } + } + public static string SupportDir { get diff --git a/OpenRA.Game/Support/Program.cs b/OpenRA.Game/Support/Program.cs index 46af602df8..f548a5ba75 100644 --- a/OpenRA.Game/Support/Program.cs +++ b/OpenRA.Game/Support/Program.cs @@ -46,6 +46,10 @@ namespace OpenRA static void FatalError(Exception e) { Log.AddChannel("exception", "exception.log"); + var mod = Game.CurrentMods.First().Value; + Log.Write("exception", "{0} Mod at Version {1}", mod.Title, mod.Version); + Log.Write("exception", "Operating System: {0} ({1})", Platform.CurrentPlatform, Environment.OSVersion); + Log.Write("exception", "Runtime Version: {0}", Platform.RuntimeVersion); var rpt = BuildExceptionReport(e).ToString(); Log.Write("exception", "{0}", rpt); Console.Error.WriteLine(rpt); @@ -69,7 +73,8 @@ namespace OpenRA static StringBuilder BuildExceptionReport(Exception e, StringBuilder sb, int d) { - if (e == null) return sb; + if (e == null) + return sb; sb.AppendFormat("Exception of type `{0}`: {1}", e.GetType().FullName, e.Message);