using System; using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Linq; using System.Net; using System.ServiceProcess; using System.Text; using System.Threading; #if TORCH_SERVICE using Microsoft.VisualBasic.Devices; #endif using NLog; using NLog.Fluent; using NLog.Targets; using Torch.Utils; namespace Torch.Server { internal static class Program { /// /// This method must *NOT* load any types/assemblies from the vanilla game, otherwise automatic updates will fail. /// [STAThread] public static void Main(string[] args) { Target.Register(nameof(LogViewerTarget)); //Ensures that all the files are downloaded in the Torch directory. var workingDir = new FileInfo(typeof(Program).Assembly.Location).Directory!.FullName; var binDir = Path.Combine(workingDir, "DedicatedServer64"); Directory.SetCurrentDirectory(workingDir); if (Directory.Exists(binDir)) foreach (var file in Directory.GetFiles(binDir, "System.*.dll")) { File.Delete(file); } TorchLauncher.Launch(workingDir, binDir); // Breaks on Windows Server 2019 #if TORCH_SERVICE if (!new ComputerInfo().OSFullName.Contains("Server 2019") && !Environment.UserInteractive) { using (var service = new TorchService(args)) ServiceBase.Run(service); return; } #endif var initializer = new Initializer(workingDir); if (!initializer.Initialize(args)) return; initializer.Run(); } } }