PatchworkLauncher.LaunchManager.LaunchManager C# (CSharp) Méthode

LaunchManager() public méthode

public LaunchManager ( ) : System
Résultat System
		public LaunchManager() {
			//the following is needed on linux... the current directory must be the Mono executable, which is bad.
			Environment.CurrentDirectory = Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location);
			try {
				FormIcon = Icon.FromHandle(Resources.IconSmall.GetHicon());
				if (File.Exists(_pathLogFile)) {
					File.Delete(_pathLogFile);
				}
				XmlPreferences prefs = new XmlPreferences();
				try {
					prefs = _prefsSerializer.Deserialize(_pathPrefsFile, new XmlPreferences());
				}
				catch (Exception ex) {
					Command_Display_Error("Read preferences file", _pathPrefsFile, ex, "Special preferences will be reset");
				}
				Preferences = prefs;
				Logger =
					new LoggerConfiguration().WriteTo.File(_pathLogFile, LogEventLevel.Verbose).MinimumLevel.Is(Preferences.MinimumEventLevel).CreateLogger();
				AppInfoFactory gameInfoFactory;

				gameInfoFactory = !File.Exists(_pathGameInfoAssembly) ? null : PatchingHelper.LoadAppInfoFactory(_pathGameInfoAssembly);
				

				var settings = new XmlSettings();
				var history = new XmlHistory();
				;
				try {
					history = _historySerializer.Deserialize(_pathHistoryXml, new XmlHistory());
				}
				catch (Exception ex) {
					Command_Display_Error("Load patching history", _pathHistoryXml, ex,
						"If the launcher was terminated unexpectedly last time, it may not be able to recover.");
				}

				try {
					settings = _settingsSerializer.Deserialize(_pathSettings, new XmlSettings());
				}
				catch (Exception ex) {
					Command_Display_Error("Read settings file", _pathSettings, ex, "Patch list and other settings will be reset.");
				}
				
				string folderDialogReason = null;
				if (settings.BaseFolder == null) {
					folderDialogReason = "(no game folder has been specified)";
				} else if (!Directory.Exists(settings.BaseFolder)) {
					folderDialogReason = "(the previous game folder does not exist)";
				}
				if (folderDialogReason != null) {
					if (!Command_SetGameFolder_Dialog(folderDialogReason)) {
						Command_ExitApplication();
					}
				} else {
					BaseFolder = settings.BaseFolder;
				}
				_home = new guiHome(this) {
					Icon = FormIcon
				};
				var defaultAppInfo = new AppInfo() {
					AppName = "No AppInfo.dll",
				};
				AppInfo = gameInfoFactory?.CreateInfo(new DirectoryInfo(BaseFolder)) ?? defaultAppInfo;
				AppInfo.AppVersion = AppInfo.AppVersion ?? "version??";
				var icon = TryOpenIcon(AppInfo.IconLocation) ?? _home.Icon.ToBitmap();
				ProgramIcon = icon;
				Instructions = new DisposingBindingList<PatchInstruction>();
				var instructions = new List<XmlInstruction>();
				foreach (var xmlPatch in settings.Instructions) {
					try {
						Command_Direct_AddPatch(xmlPatch.PatchPath, xmlPatch.IsEnabled);
					}
					catch {
						instructions.Add(xmlPatch);
					}
				}
				var patchList = instructions.Select(x => x.PatchPath).Join(Environment.NewLine);
				if (patchList.Length > 0) {
					Command_Display_Error("Load patches on startup.", patchList);
				}
				try {
					PatchingHelper.RestorePatchedFiles(AppInfo, history.Files);
				}
				catch (Exception ex) {
					Command_Display_Error("Restore files", ex: ex);
				}
				//File.Delete(_pathHistoryXml);
				
				_home.Closed += (sender, args) => Command_ExitApplication();
				_icon = new NotifyIcon {
					Icon = FormIcon,
					Visible = false,
					Text = "Patchwork Launcher",
					ContextMenu = new ContextMenu {
						MenuItems = {
							new MenuItem("Quit", (o, e) => Command_ExitApplication())
						}
					}
				};
				File.Delete(_pathHistoryXml);
			}
			catch (Exception ex) {
				Command_Display_Error("Launch the application", ex: ex, message: "The application will now exit.");
				Command_ExitApplication();
			}
		}