IRONSOFTWAREHOME

Błąd wdrożenia OcrInternals w aplikacjach x86

Curtis Chau
Curtis Chau
Updated: 29 czerwca 2026

IronTesseract.ReadScreenShot() działa przez zaawansowaną ścieżkę skanowania IronOCR, która jest obsługiwana tylko w procesie Windows x64. Wywołanie jej z aplikacji x86 kończy się błędem wdrożenia OcrInternals, nawet gdy pakiet IronOcr.Extensions.AdvancedScan jest zainstalowany.

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

Niepowodzenie pojawia się na samym wywołaniu 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#

Zaawansowane komponenty natywne, na których polega ReadScreenShot(), nie są obsługiwane w procesie x86. Instalacja IronOcr.Extensions.AdvancedScan jest wymagana, ale nie zmienia bitności procesu hosta, więc to wywołanie wciąż nie może działać w x86.

Uwaga: Instalacja AdvancedScan nie sprawia, że ReadScreenShot() działa w procesie x86. Proces, który ją wywołuje, musi działać jako x64.

Rozwiązanie

Opcja 1: Bezpośredni cel x64

Najczystsze rozwiązanie to zmiana celu platformy projektu na x64. W Visual Studio:

  1. Kliknij prawym przyciskiem myszy projekt i wybierz Właściwości.
  2. Otwórz kartę Kompilacja.
  3. Ustaw Cel platformy na x64.
  4. Odznacz Preferowane 32-bitowe.
  5. Przebuduj i uruchom.

Z procesem hosta działającym jako x64, ReadScreenShot() działa w obsługiwanym środowisku.

Opcja 2: Utrzymaj app x86 i wywołuj proces pomocniczy x64

Kiedy główna aplikacja musi pozostać x86, przenieś tylko operację OCR do małego procesu pomocniczego x64 i wywołuj go z istniejącej aplikacji. Struktura wygląda na:

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

Aplikacja x86 pozostaje niezmieniona, podczas gdy AdvancedScan działa tam, gdzie jest obsługiwane.

Wywoływanie pomocnika z aplikacji x86

Uruchom pomocnika z ProcessStartInfo i odczytaj jego wyjście:

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#

Przekierowanie zarówno StandardOutput, jak i StandardError pozwala wywołującemu uchwycić rozpoznany tekst i wyświetlić wszelkie niepowodzenie z kodu wyjścia pomocnika.

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

Budowanie pomocnika x64

Zbuduj pomocnika jako aplikację konsolową x64, która odnosi się do IronOcr i IronOcr.Extensions.AdvancedScan. Odczytuje ścieżkę obrazu z pierwszego argumentu, uruchamia OCR i zapisuje wynik do 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#

Odrębne kody wyjścia (1 2, 99) pozwalają wywołującej aplikacji rozróżniać brakujący argument od brakującego pliku lub nieoczekiwanego wyjątku.

Notatki do użytkowania produkcyjnego

Przykład wykorzystuje stdout dla uproszczenia. Dla produkcji wybierz metodę komunikacji, która pasuje do twojej architektury. Opcje obejmują:

  • Standardowe wyjście i standardowy błąd.
  • Tymczasowe pliki JSON.
  • Nazwane potoki.
  • Lokalny punkt końcowy HTTP.
  • Usługa Windows hostująca operację OCR w x64.

Dla małych lub okazjonalnych wywołań: uruchamianie pomocnika na żądanie zazwyczaj jest w porządku. Dla dużych obciążeń roboczych: długotrwała usługa pomocnika x64 jest zazwyczaj bardziej efektywna niż tworzenie nowego procesu na każde żądanie.

Wskazówki dotyczące debugowania

Przeanalizuj te sprawdzenia, gdy podejście pomocnika działa źle:

  • Potwierdź, że główna aplikacja faktycznie musi pozostać x86, i że Ocr.Read() nie wystarcza dla scenariusza zrzutu ekranu.
  • Zweryfikuj ReadScreenShot(), gdy uruchamiane bezpośrednio z procesu x64.
  • Zbuduj projekt pomocnika z Platforma docelowa: x64 i upewnij się, że aplikacja x86 nigdy nie wywołuje ReadScreenShot() siebie.
  • Zainstaluj IronOcr.Extensions.AdvancedScan w projekcie pomocnika x64.
  • Sprawdź, czy ścieżka obrazu przekazana do pomocnika jest osiągalna przez proces pomocnika.
  • Skonfiguruj klucz licencyjny IronOCR w kodzie, konfiguracji aplikacji lub zmiennej środowiskowej IRONOCR_LICENSE_KEY.

Podczas publikowania pomocnika skopiuj całą zawartość folderu build, nie tylko .exe. Folder wyjściowy musi zawierać wszystkie odwoływane zbiory i natywne pliki uruchomieniowe generowane podczas budowania, w przeciwnym razie pomocnik napotka ten sam błąd wdrożenia.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Gotowy, aby rozpocząć?

Nuget Downloads 6,236,385Wersja:2026.9właśnie wydany

Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta
Biblioteka C# NuGet dla plików PDF
Zainstaluj za pomocą NuGet

Wersja: 2026.9

PM > Install-Package IronOcr
nuget.org/packages/IronOcr/
  1. W Eksploratorze Rozwiązań, kliknij prawym przyciskiem Myszy na Odwołania, Zarządzaj pakietami NuGet
  2. Wybierz Przeglądaj i szukaj „IronOCR”
  3. Wybierz pakiet i zainstaluj
DLL PDF dla C#
Pobierz DLL

Wersja: 2026.9

lub pobierz Instalator Windows tutaj.

  1. Pobierz i rozpakuj IronOCR do lokalizacji, takiej jak ~/Libs w katalogu Solution
  2. W Eksploratorze rozwiązań Visual Studio kliknij prawym przyciskiem myszy Odwołania. Wybierz Przeglądaj, „IronOCR.dll”

Licencje od 749 USD

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta