IRONSOFTWAREHOME

在x86应用程序中OcrInternals部署错误

Curtis Chau
Curtis Chau
Updated: 2026年6月29日

IronTesseract.ReadScreenShot() 在IronOCR的AdvancedScan管道中运行,仅支持在Windows x64进程中。 从x86应用程序调用它会导致OcrInternals 部署错误,即使安装了IronOcr.Extensions.AdvancedScan 包。

Error while reading a screenshot, Error while deploying OcrInternals for IronOcr:
'Unable to locate 'OcrInternals' in
...\bin\Debug\runtimes\win-x86\native,
...\bin\Debug\runtimes\win.6.2-x86\native,
...\bin\Debug\runtimes\win.6-x86\native,
...\bin\Debug\,
...
nor in an embedded resource.'
Please install the NuGet Package 'IronOcr.Extension.AdvancedScan' when using IronOcr on Windows.
[Issue Code IRONOCR-OCRINTERNALS-DEPLOYMENT-ERROR-WIN]
Text

故障显现在ReadScreenShot() 调用本身:

var ocr = new IronOcr.IronTesseract();
using (var input = new IronOcr.OcrInput())
{
    input.LoadImage("Step_1-5.jpg");
    var result = ocr.ReadScreenShot(input);
    Console.WriteLine(result.Text);
}
C#

AdvancedScan本机组件依赖的ReadScreenShot() 不支持在x86进程中。 需要安装IronOcr.Extensions.AdvancedScan,但这不会更改主机进程的位数,因此调用仍不能在x86下运行。

([(安装AdvancedScan并不能使ReadScreenShot()在x86进程中工作。 调用它的进程必须以x64运行。)

解决方案

选项1:直接定位x64

最干净的解决方法是将项目的平台目标切换为x64。在Visual Studio中:

  1. 右键点击项目并选择属性
  2. 打开生成选项卡。
  3. 设置平台目标x64
  4. 取消勾选首选32位
  5. 重新构建并运行。

当主机进程以x64运行时,ReadScreenShot() 在支持的环境中执行。

选项2:保持应用程序x86并调用x64帮助进程

当主应用程序必须保持x86时,仅将OCR操作移至一个小型x64帮助进程并从现有应用程序调用结构如下:

MainWinForms.x86
  - .NET Framework Windows Forms app
  - Platform target: x86
  - Does not run ReadScreenShot() directly
  - Calls the x64 helper process
OcrHelper.x64
  - .NET Framework Console app
  - Platform target: x64
  - References IronOCR
  - References IronOcr.Extensions.AdvancedScan
  - Runs Ocr.ReadScreenShot()
  - Returns the OCR result to the main app
Text

x86应用程序保持不变,而AdvancedScan在其受支持的地方运行。

从x86应用程序调用帮助进程

使用ProcessStartInfo 启动助手并读取其输出:

using System;
using System.Diagnostics;
using System.IO;
public static class OcrHelperClient
{
    public static string ReadScreenshotWithHelper(string imagePath)
    {
        string helperExePath = Path.Combine(
            AppDomain.CurrentDomain.BaseDirectory,
            "OcrHelper.x64",
            "OcrHelper.x64.exe"
        );
        if (!File.Exists(helperExePath))
        {
            throw new FileNotFoundException("The OCR helper executable was not found.", helperExePath);
        }
        var startInfo = new ProcessStartInfo
        {
            FileName = helperExePath,
            Arguments = "\"" + imagePath + "\"",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true
        };
        using (var process = new Process())
        {
            process.StartInfo = startInfo;
            process.Start();
            string output = process.StandardOutput.ReadToEnd();
            string error = process.StandardError.ReadToEnd();
            process.WaitForExit();
            if (process.ExitCode != 0)
            {
                throw new Exception("OCR helper failed: " + error);
            }
            return output;
        }
    }
}
C#

重定向StandardOutputStandardError 允许调用者捕获识别文本并显示任何从助手的退出代码中出现的故障。

string imagePath = @"C:\Images\Step_1-5.jpg";
string text = OcrHelperClient.ReadScreenshotWithHelper(imagePath);
Console.WriteLine(text);
C#

构建x64帮助进程

将助手构建为引用IronOcrIronOcr.Extensions.AdvancedScan 的x64控制台应用程序。 它从第一个参数读取图像路径,运行OCR,并将结果写入stdout

using System;
using System.IO;
using IronOcr;
namespace OcrHelper.x64
{
    internal static class Program
    {
        private static int Main(string[] args)
        {
            try
            {
                if (args.Length == 0)
                {
                    Console.Error.WriteLine("Missing image path argument.");
                    return 1;
                }
                string imagePath = args[0];
                if (!File.Exists(imagePath))
                {
                    Console.Error.WriteLine("Image file was not found: " + imagePath);
                    return 2;
                }
                string licenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE_KEY");
                if (!string.IsNullOrWhiteSpace(licenseKey))
                {
                    License.LicenseKey = licenseKey;
                }
                var ocr = new IronTesseract();
                using (var input = new OcrInput())
                {
                    input.LoadImage(imagePath);
                    var result = ocr.ReadScreenShot(input);
                    Console.WriteLine(result.Text);
                }
                return 0;
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.ToString());
                return 99;
            }
        }
    }
}
C#

不同的退出代码(1, 2, 99)让调用应用程序区分缺失参数、缺失文件或意外异常。

生产使用说明

样例使用stdout 简化。 对于生产,请选择适合您架构的通信方法。 选项包括:

  • 标准输出和标准错误。
  • 临时JSON文件。
  • 命名管道。
  • 本地HTTP端点。
  • 托管x64 OCR操作的Windows服务。

**对于小型或偶尔的调用:**按需启动帮助进程通常很好。**对于大容量工作负载:**长时间运行的x64帮助服务往往比每次请求生成一个进程更高效。

调试提示

当帮助进程方法运行不正常时,请通过以下检查:

  • 确认主应用程序确实需要保持x86,并且Ocr.Read() 对屏幕截图场景是不够的。
  • 验证ReadScreenShot() 在直接从x64进程运行时成功。
  • 使用平台目标:x64构建助手项目,并确保x86应用程序从不调用ReadScreenShot() 本身。
  • 在x64助手项目中安装IronOcr.Extensions.AdvancedScan
  • 检查传递给帮助进程的图像路径是否可以被帮助进程访问。
  • 在代码、应用程序配置或IRONOCR_LICENSE_KEY 环境变量中配置IronOCR许可证密钥。

发布助手时,复制整个构建输出,而不仅仅是.exe。 输出文件夹必须包括所有引用的程序集和构建生成的本地运行时文件,否则帮助进程将遇到相同的部署错误。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

Nuget Downloads 6,236,385版本:2026.9刚刚发布

立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronOcr
nuget.org/packages/IronOcr/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索"IronOCR"
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在这里下载Windows安装程序。

  1. 下载并解压IronOCR到你的解决方案目录中的~/Libs位置
  2. 在Visual Studio解决方案资源管理器中,右键点击引用。选择浏览,“IronOCR.dll”

许可证售价$999

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户