huiyadanli/RevokeMsgPatcher · error · Exception

补丁安装失败,原因:无对应的文件修改器

Error message

补丁安装失败,原因:无对应的文件修改器

What it means

AppModifier.Patch() throws a plain Exception if editors.Count == 0. That means InitEditors was never run, returned false, or no TargetInfo matched the installed app's version range, so no file editors exist to patch.

Solutions

  1. Always call InitEditors(installPath) and check its bool return before Patch().
  2. Ensure config.FileTargetInfos has entries whose StartVersion/EndVersion range matches the installed app version.
  3. Abort the flow with a user message when InitEditors returns false.

Example fix

// before
modifier.InitEditors(installPath);
modifier.Patch(); // throws if editors empty

// after
if (!modifier.InitEditors(installPath))
{
    // InitEditors already showed a MessageBox; abort.
    return;
}
modifier.ValidateAndFindModifyInfo(categories);
modifier.Patch();
Defensive patterns

Strategy: validation

Validate before calling

if (!modifier.InitEditors(installPath))
{
    // InitEditors already showed '当前版本没有对应的文件修改信息...'.
    return;
}
modifier.ValidateAndFindModifyInfo(categories);
modifier.Patch();

Prevention

When it happens

Trigger: Calling Patch() before InitEditors(installPath) + ValidateAndFindModifyInfo(...); or InitEditors returned false (showing '当前版本没有对应的文件修改信息...') and the caller still proceeded to Patch().

Common situations: Orchestration code skipped InitEditors or ignored its bool return value; the app version is outside every TargetInfo's version range.

Related errors


AI-assisted analysis of huiyadanli/RevokeMsgPatcher@89cbbb3f0c (2026-08-13). Data as JSON: /api/errors/755b0266f93e208f. Report an issue: GitHub.

Appendix: source

Thrown at RevokeMsgPatcher/Modifier/AppModifier.cs:392

                        {
                            throw new BusinessException("maybe_modified", $"程序支持此文件版本: {editor.FileName} - {editor.FileVersion}。但是文件校验不通过,请确认是否使用过其他补丁程序!");
                        }
                    }
                }
            }
        }

        /// <summary>
        /// c.根据补丁信息,安装补丁
        /// 两种打补丁的方式:精准(指定位置替换)、通用(特征码替换)
        /// </summary>
        /// <returns></returns>
        public bool Patch()
        {
            // 首先验证文件修改器是否没问题
            if (editors.Count == 0)
            {
                throw new Exception("补丁安装失败,原因:无对应的文件修改器");
            }

            foreach (FileHexEditor editor in editors)
            {
                if (editor == null)
                {
                    throw new Exception("补丁安装失败,原因:文件修改器初始化失败!");
                }
            }

            // 再备份所有文件
            foreach (FileHexEditor editor in editors)
            {
                editor.Backup();
            }

            // 打补丁!
            List<FileHexEditor> done = new List<FileHexEditor>(); // 已经打上补丁的

View on GitHub (pinned to 89cbbb3f0c)