//private string _tempBinPath; #region methods public bool Init(string[] args) { // Detection and correction of local settings of SE install location. var filePath = ToolboxUpdater.GetApplicationFilePath(); var validApps = new string[] { "SpaceEngineers.exe", "SpaceEngineersDedicated.exe", //"MedievalEngineers.exe", //"MedievalEngineersDedicated.exe" }; if (GlobalSettings.Default.PromptUser || !ToolboxUpdater.ValidateSpaceEngineersInstall(filePath)) { if (Directory.Exists(filePath)) { foreach (var validApp in validApps) { var testPath = Path.Combine(filePath, validApp); if (File.Exists(testPath)) { filePath = testPath; break; } } } var faModel = new FindApplicationModel() { GameApplicationPath = filePath }; var faViewModel = new FindApplicationViewModel(faModel); var faWindow = new WindowFindApplication(faViewModel); if (faWindow.ShowDialog() == true) { filePath = faModel.GameBinPath; } else { return(false); } } // Update and save user path. GlobalSettings.Default.SEBinPath = filePath; GlobalSettings.Default.Save(); var ignoreUpdates = args.Any(a => a.ToUpper() == "/X" || a.ToUpper() == "-X"); var oldDlls = true; // args.Any(a => a.ToUpper() == "/OLDDLL" || a.ToUpper() == "-OLDDLL"); var altDlls = !oldDlls; // Go looking for any changes in the Dependant Space Engineers assemblies and immediately attempt to update. if (!ignoreUpdates && !altDlls && ToolboxUpdater.IsBaseAssembliesChanged() && !Debugger.IsAttached) { ToolboxUpdater.RunElevated(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "SEToolboxUpdate"), "/B " + String.Join(" ", args), false, false); return(false); } var proc = Process.GetCurrentProcess(); if (Process.GetProcessesByName(proc.ProcessName).Length == 1) { // Clean up Temp files if this is the only instance running. TempfileUtil.DestroyTempFiles(); } // Dot not load any of the Space Engineers assemblies or dependant classes before this point. // ============================================ // Alternate experimental method for loading the Space Engineers API assemblies. // Copy them to temporary path, then load with reflection on demand through the AppDomain. //if (altDlls) //{ // _tempBinPath = ToolboxUpdater.GetBinCachePath(); // var searchPath = GlobalSettings.Default.SEBinPath; // DirectoryInfo checkDir = null; // var counter = 0; // while (checkDir == null && counter < 10) // { // if (Directory.Exists(_tempBinPath)) // break; // checkDir = Directory.CreateDirectory(_tempBinPath); // if (checkDir == null) // { // // wait a while, as the drive may be processing Windows Explorer which had a lock on the Directory after prior cleanup. // System.Threading.Thread.Sleep(100); // } // counter++; // } // foreach (var file in ToolboxUpdater.CoreSpaceEngineersFiles) // { // var filename = Path.Combine(searchPath, file); // var destFilename = Path.Combine(_tempBinPath, file); // if (ToolboxUpdater.DoFilesDiffer(searchPath, _tempBinPath, file)) // { // try // { // File.Copy(filename, destFilename, true); // } // catch { } // } // } // // Copy directories which contain Space Engineers language resources. // var dirs = Directory.GetDirectories(searchPath); // foreach (var sourceDir in dirs) // { // var dirName = Path.GetFileName(sourceDir); // var destDir = Path.Combine(_tempBinPath, dirName); // Directory.CreateDirectory(destDir); // foreach (string oldFile in Directory.GetFiles(sourceDir, "*.*", SearchOption.AllDirectories)) // { // try // { // File.Copy(oldFile, Path.Combine(destDir, Path.GetFileName(oldFile)), true); // } // catch { } // } // } // AppDomain currentDomain = AppDomain.CurrentDomain; // currentDomain.AssemblyResolve += currentDomain_AssemblyResolve; //} #if DEBUG // This will make it hairy for testing the AppDomain stuff. #warning Force the local debugger to load the Types allowing inspection. var settings0 = new VRage.Game.MyObjectBuilder_SessionSettings(); var settings1 = new Sandbox.Common.ObjectBuilders.MyObjectBuilder_InteriorLight(); #endif return(true); }