LoadAppInfoFactory() public static method

public static LoadAppInfoFactory ( string assembly ) : AppInfoFactory
assembly string
return Patchwork.AutoPatching.AppInfoFactory
コード例 #1
0
ファイル: LaunchManager.cs プロジェクト: slamj1/Patchwork
        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();
            }
        }
コード例 #2
0
 private static AppInfoFactory GetFactory(string filePath)
 {
     return(File.Exists(filePath) ? PatchingHelper.LoadAppInfoFactory(filePath) : null);
 }