Tworzenie instalatora MSI w języku C# za pomocą IronBarcode

This article was translated from English: Does it need improvement?
Translated
View the article in English

Aby stworzyć instalator MSI z IronBarCode, dodaj Projekt Instalacyjny do swojego rozwiązania, uwzględnij wymagane DLL (onnxruntime.dll, IronBarcodeInterop.dll oraz ReaderInterop.dll) i zbuduj projekt, aby wygenerować pakiet MSI do dystrybucji.

MSI (Microsoft Installer) to pakiet instalacyjny systemu Windows, który ułatwia instalację, aktualizację i usuwanie oprogramowania. Korzystanie z pliku MSI zapewnia standardową metodę instalacji aplikacji, co jest szczególnie korzystne w przypadku wdrożeń Enterprise. Format MSI obsługuje zaawansowane funkcje, takie jak możliwość przywracania poprzednich wersji, administracyjne punkty instalacji oraz integrację z usługą Windows Installer.

IronBarcode oferuje narzędzia umożliwiające płynną integrację z istniejącą aplikacją i konwersję jej do formatu MSI w celu łatwej dystrybucji. Zapewnia to niezawodną instalację w różnych środowiskach i pozwala programistom wybrać, które komponenty mają zostać uwzględnione, a które pominięte. Biblioteka obsługuje wiele formatów BARCODE, dzięki czemu jest wszechstronna i nadaje się do różnych zastosowań biznesowych.

Ten samouczek pokazuje, jak utworzyć plik MSI na podstawie przykładowej aplikacji do obsługi kodów kreskowych, która wykorzystuje zaawansowane możliwości skanowania biblioteki IronBarcode.

Szybki start: Generowanie i odczytywanie BarCoda MSI jednym kliknięciem

Wykorzystaj proste API IronBarcode do tworzenia i odczytywania kodów kreskowych MSI przy minimalnej konfiguracji. Poniższy fragment kodu pokazuje, jak łatwo jest zapisać obraz kodu kreskowego MSI, a następnie go odczytać — wszystko to w zaledwie kilku wierszach.

  1. Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode
  2. Skopiuj i uruchom ten fragment kodu.

    var msiImg = IronBarCode.BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.MSI).SaveAsImage("msi.png");
    var results = IronBarCode.BarcodeReader.Read("msi.png", new BarcodeReaderOptions { ExpectBarcodeTypes = BarcodeEncoding.MSI });
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronBarcode w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jakie warunki wstępne muszę spełnić przed rozpoczęciem pracy?

Przed rozpoczęciem projektu prosimy o pobranie rozszerzenia Microsoft Visual Studio Installer Projects aby kompilacja MSI działała. Dodatkowo upewnij się, że w swoim projekcie zainstalowałeś IronBarcode za pośrednictwem NuGet.

Dlaczego wymagane jest rozszerzenie Visual Studio Installer Projects?

Rozszerzenie udostępnia szablon projektu instalacyjnego niezbędny do tworzenia instalatorów MSI w Visual Studio 2022. Rozszerzenie to dodaje szablony projektów wdrożeniowych, które zostały usunięte z Visual Studio po wersji 2010, umożliwiając programistom tworzenie tradycyjnych pakietów Windows Installer.

Na jaką wersję .NET Framework powinienem się skupić?

Użyj aplikacji Windows Forms (.NET Framework), aby uzyskać maksymalną kompatybilność ze scenariuszami wdrażania MSI. Chociaż IronBarcode obsługuje różne platformy .NET, wersja .NET Framework zapewnia najszerszą kompatybilność z systemami Windows, w których zazwyczaj wdrażane są instalatory MSI.

Jak utworzyć wstępny projekt instalatora MSI?

W tym przykładzie należy wykorzystać projekt aplikacji Windows Forms (.NET Framework) w celu zademonstrowania jego funkcjonalności. Takie podejście zapewnia znany paradygmat interfejsu użytkownika dla aplikacji do skanowania kodów kreskowych na komputerach stacjonarnych.

Który typ projektu najlepiej sprawdza się w przypadku instalatorów MSI?

Aplikacje Windows Forms zapewniają najprostszą ścieżkę tworzenia aplikacji do skanowania BarCode wdrażanych w formacie MSI. Oferują one natywną integrację z systemem Windows i nie wymagają dodatkowych zależności środowiskowych poza platformą .NET Framework.

Jakie są kluczowe elementy aplikacji demonstracyjnej?

Aplikacja składa się z formularza z przyciskiem, który otwiera okno dialogowe plików w celu skanowania BarCodes z obrazów. Ten prosty interfejs demonstruje podstawową funkcjonalność, jednocześnie minimalizując złożoność wdrożenia. W bardziej zaawansowanych scenariuszach warto rozważyć odczytywanie BarCodes z plików PDF lub wdrożenie asynchronicznego odczytu BarCodes.

Jak dodać przycisk do formularza Windows Form?

  • Przejdź do ToolBox
  • Przycisk wyszukiwania
  • Dodaj przycisk, przeciągając go i upuszczając na formularz Windows

Visual Studio Toolbox showing Button control highlighted under All Windows Forms section for adding to form

Gdzie mogę znaleźć kontrolkę przycisku?

Kontrolka Button znajduje się w sekcji Common Controls w panelu narzędzi Visual Studio. Jeśli okno Toolbox nie jest widoczne, otwórz je, wybierając opcję Widok > Toolbox lub naciskając klawisze Ctrl+Alt+X.

Jak umieścić przycisk w formularzu?

Wyśrodkuj przycisk w formularzu lub umieść go w miejscu, w którym użytkownicy naturalnie oczekują znalezienia głównej akcji. Warto wziąć pod uwagę wytyczne dotyczące interfejsu użytkownika systemu Windows, aby zapewnić spójne wrażenia użytkownika we wszystkich aplikacjach.

Jak edytować kod przycisku, aby obsługiwał skanowanie BarCode'ów?

Kliknij dwukrotnie na komponent przycisku, aby uzyskać dostęp do kodu C# formularza. Poniżej znajduje się logika komponentu formularza — pobiera on BarCode i próbuje go zeskanować. Ten kod skanuje wyłącznie obrazy i nie działa w przypadku plików PDF. Użyj metody ReadPdf dla dokumentów PDF. Aby uzyskać informacje na temat wszystkich opcji odczytu kodów kreskowych, zapoznaj się z dokumentacją dotyczącą ustawień czytnika kodów kreskowych.

using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Drawing;
using System.Windows.Forms;

namespace MsiInstallerSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All;
            IronSoftware.Logger.LogFilePath = "Default.log";

            IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";

            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Filter = "Image files (All files (*.*)|*.*";

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        // Load the selected image
                        using (Bitmap bmp = new Bitmap(openFileDialog.FileName))
                        {
                            // Process the image
                            AnyBitmap anyBitmap = AnyBitmap.FromBitmap(bmp);

                            // Configure barcode reader options (customize as needed)
                            var option = new BarcodeReaderOptions
                            {
                                Speed = ReadingSpeed.Detailed,
                                ExpectMultipleBarcodes = true,
                                ScanMode = BarcodeScanMode.Auto,
                            };

                            BarcodeResults result = IronBarCode.BarcodeReader.Read(anyBitmap, option);

                            if (result.Count > 0)
                            {
                                string output = string.Empty;
                                foreach(var barcode in result)
                                {
                                    Console.WriteLine($"Barcode Found: {barcode.Text}");
                                    output += barcode.Text + "\n";
                                }

                                MessageBox.Show($"Detected Barcodes: \n{output}");
                            }
                            else
                            {
                                MessageBox.Show("No Barcode found.");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"{ex.Message}");
                    }
                }
            }
        }
    }
}
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Drawing;
using System.Windows.Forms;

namespace MsiInstallerSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All;
            IronSoftware.Logger.LogFilePath = "Default.log";

            IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";

            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Filter = "Image files (All files (*.*)|*.*";

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        // Load the selected image
                        using (Bitmap bmp = new Bitmap(openFileDialog.FileName))
                        {
                            // Process the image
                            AnyBitmap anyBitmap = AnyBitmap.FromBitmap(bmp);

                            // Configure barcode reader options (customize as needed)
                            var option = new BarcodeReaderOptions
                            {
                                Speed = ReadingSpeed.Detailed,
                                ExpectMultipleBarcodes = true,
                                ScanMode = BarcodeScanMode.Auto,
                            };

                            BarcodeResults result = IronBarCode.BarcodeReader.Read(anyBitmap, option);

                            if (result.Count > 0)
                            {
                                string output = string.Empty;
                                foreach(var barcode in result)
                                {
                                    Console.WriteLine($"Barcode Found: {barcode.Text}");
                                    output += barcode.Text + "\n";
                                }

                                MessageBox.Show($"Detected Barcodes: \n{output}");
                            }
                            else
                            {
                                MessageBox.Show("No Barcode found.");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"{ex.Message}");
                    }
                }
            }
        }
    }
}
Imports IronBarCode
Imports IronSoftware.Drawing
Imports System
Imports System.Drawing
Imports System.Windows.Forms

Namespace MsiInstallerSample
    Partial Public Class Form1
        Inherits Form

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
            IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All
            IronSoftware.Logger.LogFilePath = "Default.log"

            IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01"

            Using openFileDialog As New OpenFileDialog()
                openFileDialog.Filter = "Image files (All files (*.*)|*.*"

                If openFileDialog.ShowDialog() = DialogResult.OK Then
                    Try
                        ' Load the selected image
                        Using bmp As New Bitmap(openFileDialog.FileName)
                            ' Process the image
                            Dim anyBitmap As AnyBitmap = AnyBitmap.FromBitmap(bmp)

                            ' Configure barcode reader options (customize as needed)
                            Dim option As New BarcodeReaderOptions With {
                                .Speed = ReadingSpeed.Detailed,
                                .ExpectMultipleBarcodes = True,
                                .ScanMode = BarcodeScanMode.Auto
                            }

                            Dim result As BarcodeResults = IronBarCode.BarcodeReader.Read(anyBitmap, option)

                            If result.Count > 0 Then
                                Dim output As String = String.Empty
                                For Each barcode In result
                                    Console.WriteLine($"Barcode Found: {barcode.Text}")
                                    output += barcode.Text & vbCrLf
                                Next

                                MessageBox.Show($"Detected Barcodes: {vbCrLf}{output}")
                            Else
                                MessageBox.Show("No Barcode found.")
                            End If
                        End Using
                    Catch ex As Exception
                        MessageBox.Show($"{ex.Message}")
                    End Try
                End If
            End Using
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

Jakie są kluczowe elementy logiki odczytu BarCode?

Kod używa OpenFileDialog do wyboru obrazów, konfiguruje BarcodeReaderOptions do szczegółowego skanowania i wyświetla wyniki za pomocą MessageBox. Opcje szybkości czytania można dostosować w zależności od wymagań dotyczących wydajności. Ustawienie ExpectMultipleBarcodes umożliwia odczytywanie wielu kodów kreskowych z jednego obrazu.

Jak radzić sobie z błędami w środowisku produkcyjnym?

Należy uwzględnić odpowiednie rejestrowanie błędów i przyjazne dla użytkownika komunikaty o błędach zamiast wyświetlania surowych szczegółów wyjątków. Należy rozważyć wdrożenie logiki ponownej próby w przypadku nierozpoznania kodu kreskowego oraz udzielenie użytkownikom wskazówek dotyczących wymagań dotyczących jakości obrazu.

Czy za pomocą tego kodu mogę skanować dokumenty PDF?

Dla dokumentów PDF zastąp metodę BarcodeReader.Read metodą BarcodeReader.ReadPdf, aby poprawnie obsłużyć ekstrakcję kodów kreskowych z PDF. Możesz również zapoznać się z ustawieniami czytnika kodów kreskowych dla plików PDF, aby zoptymalizować wydajność.

Oto przykład, jak zmodyfikować kod w celu obsługi plików PDF:

// For PDF documents, use ReadPdf method
if (Path.GetExtension(openFileDialog.FileName).ToLower() == ".pdf")
{
    var pdfResults = BarcodeReader.ReadPdf(openFileDialog.FileName, option);
    // Process PDF results similar to image results
}
// For PDF documents, use ReadPdf method
if (Path.GetExtension(openFileDialog.FileName).ToLower() == ".pdf")
{
    var pdfResults = BarcodeReader.ReadPdf(openFileDialog.FileName, option);
    // Process PDF results similar to image results
}
' For PDF documents, use ReadPdf method
If Path.GetExtension(openFileDialog.FileName).ToLower() = ".pdf" Then
    Dim pdfResults = BarcodeReader.ReadPdf(openFileDialog.FileName, option)
    ' Process PDF results similar to image results
End If
$vbLabelText   $csharpLabel

Jak dodać projekt instalacyjny, aby utworzyć plik MSI?

Po skonfigurowaniu formularza i logiki kontrolera dodaj projekt Setup Project do istniejącego rozwiązania, aby utworzyć instalator MSI. Projekt Setup pozwala na stworzenie instalatora dla właśnie utworzonej aplikacji. Proces ten łączy wszystkie niezbędne komponenty, w tym zależności IronBarcode, w jedną jednostkę gotową do wdrożenia.

Kliknij prawym przyciskiem myszy na rozwiązanie, a następnie przejdź do Dodaj > Nowy projekt...

 related to Jak dodać projekt instalacyjny, aby utworzyć plik MSI?

W przypadku instalatora MSI należy ponownie skompilować projekt MsiInstallerSample w trybie Release. Kliknij prawym przyciskiem myszy na projekt Setup, a następnie przejdź do Add > Project Output...

Visual Studio Add Project Output Group dialog showing deployment options for SetupProject with Solution Explorer visible

Aby zapewnić płynne działanie instalatora MSI, musisz uwzględnić następujące trzy pliki w swoim projekcie instalacyjnym: onnxruntime.dll, IronBarcodeInterop.dll, i ReaderInterop.dll. Pliki te są generowane podczas kompilacji projektu w trybie Release:

  • onnxruntime.dll: Zlokalizowany w MsiInstallerSample\MsiInstallerSample\bin\Release
  • IronBarcodeInterop.dll: Zlokalizowany w MsiInstallerSample\MsiInstallerSample\bin\Release\runtimes\win-x86\native
  • ReaderInterop.dll: Zlokalizowany w MsiInstallerSample\MsiInstallerSample\bin\Release\runtimes\win-x86\native

Visual Studio file dialog selecting ReaderInterop.dll to add to setup project with Solution Explorer showing dependencies

Jeśli którykolwiek z tych plików zostanie pominięty, może pojawić się następujący komunikat o wyjątku, jak opisano w tym artykule dotyczącym rozwiązywania problemów: Brakujące biblioteki DLL podczas tworzenia instalatora MSI

Na koniec skompiluj projekt instalacyjny. Instalator będzie zlokalizowany pod adresem: MsiInstallerSample\SetupProject\Release

Dlaczego potrzebne są właśnie te biblioteki DLL?

IronBarcode korzysta z tych bibliotek natywnych w celu wykrywania kodów kreskowych i przetwarzania ich w oparciu o uczenie maszynowe. Plik onnxruntime.dll zapewnia środowisko uruchomieniowe uczenia maszynowego, natomiast pliki IronBarcodeInterop.dll i ReaderInterop.dll obsługują natywne operacje przetwarzania kodów kreskowych. Te komponenty umożliwiają zaawansowane funkcje jak korekcja obrazu oraz tolerancja błędów.

Co się stanie, jeśli zapomnę uwzględnić te DLL?

Brakujące DLL spowodują wyjątki w czasie wykonywania, gdy użytkownicy spróbują skanować kody kreskowe po instalacji. Aplikacja może nie zainicjalizować poprawnie IronBarCode, co skutkuje błędami FileNotFoundException lub DllNotFoundException.

Jak skonfigurować ustawienia wyjściowe projektu?

Wybierz "Primary output", gdy dodajesz wyjście projektu, aby uwzględnić główny plik wykonywalny i jego zarządzane zależności. To zapewnia uwzględnienie wszystkich assembly .NET, ale pamiętaj, aby ręcznie dodać powyżej wymienione natywne DLL.

Jak uruchomić i przetestować instalator MSI?

Zainstaluj aplikację za pomocą pliku MSI, aby upewnić się, że wszystko działa płynnie. Testy powinny obejmować zarówno scenariusze instalacji, jak i deinstalacji, aby zweryfikować poprawne wdrożenie.

Visual Studio showing completed installer build with Release folder containing setup.exe and installer files

Co należy sprawdzić podczas testów?

Zweryfikuj, czy aplikacja uruchamia się poprawnie, czy potrafi otworzyć dialogi plików i skutecznie skanuje kody kreskowe z obrazów testowych. Przetestuj z różnymi obsługiwanymi formatami kodów kreskowych, aby zapewnić pełną funkcjonalność. Zwróć także uwagę, czy aplikacja klucza licencyjnego działa poprawnie w wdrożonym środowisku.

Jak można rozwiązywać problemy z instalacją?

Włącz logowanie Instalatora Windows, aby uchwycić szczegółowe informacje o wszelkich problemach z instalacją lub brakujących komponentach. Sprawdź Windows Event Viewer dla dodatkowych szczegółów dotyczących błędów i skonsultuj przewodnikami rozwiązywania problemów w przypadku typowych problemów wdrożeniowych.

Gdzie mogę pobrać kompletny projekt przykładowy?

Możesz pobrać pełny kod do tego przewodnika. Jest dostępny jako plik zip, który możesz otworzyć w Visual Studio jako projekt WinFormApp. Przykład zawiera wszystkie niezbędne konfiguracje i demonstruje najlepsze praktyki dla wdrożenia MSI.

Pobierz projekt aplikacji WinForm MSI

Co zawiera przykładowy projekt?

Pobranie zawiera kompletną solucję Visual Studio z aplikacją Windows Forms i skonfigurowanym projektem instalacyjnym. Zawiera przykładowe obrazy kodów kreskowych do testowania i demonstruje poprawną konfigurację klucza licencyjnego dla scenariuszy wdrożeniowych.

Jak otworzyć pobrany projekt?

Rozpakuj plik ZIP i otwórz plik .sln w Visual Studio 2022 z zainstalowanym rozszerzeniem Installer Projects. Upewnij się, że masz zainstalowaną najnowszą wersję IronBarCode poprzez Menedżera pakietów NuGet. Dla bardziej szczegółowych instrukcji dotyczących konfiguracji, zapoznaj się z dokumentacją API.

Często Zadawane Pytania

Jakie pliki DLL są wymagane przy tworzeniu instalatora MSI z aplikacją kodu kreskowego?

Podczas tworzenia instalatora MSI z IronBarCode, należy uwzględnić trzy niezbędne pliki DLL: onnxruntime.dll, IronBarcodeInterop.dll i ReaderInterop.dll. Zapewniają one, że IronBarCode działa poprawnie, gdy twoja aplikacja jest wdrażana za pośrednictwem pakietu MSI.

Jakie wymagania wstępne muszę spełnić przed stworzeniem instalatora MSI dla mojej aplikacji z kodem kreskowym?

Przed stworzeniem instalatora MSI z IronBarCode, musisz pobrać i zainstalować rozszerzenie Microsoft Visual Studio Installer Projects dla Visual Studio 2022. Dodatkowo upewnij się, że IronBarCode jest zainstalowane w twoim projekcie za pomocą menedżera pakietów NuGet.

Jak szybko wygenerować i odczytać kody kreskowe MSI w C#?

IronBarCode oferuje proste API do generowania i odczytywania kodów kreskowych MSI. Możesz stworzyć kod kreskowy MSI za pomocą BarcodeWriter.CreateBarcode() z typem kodowania MSI, zapisać go jako obraz, a następnie odczytać go za pomocą BarcodeReader.Read() z BarcodeEncoding.MSI określonym w opcjach odczytu.

Jakie są zalety używania instalatorów MSI do dystrybucji aplikacji z kodami kreskowymi?

Instalatory MSI oferują znormalizowane metody instalacji idealne do wdrożeń w przedsiębiorstwach. Po połączeniu z IronBarCode oferują możliwości wycofania, punkty instalacyjne administracyjne, integrację z usługą Windows Installer i zapewniają niezawodną instalację w różnych środowiskach, umożliwiając jednocześnie programistom wybór, które komponenty dołączyć.

Czy biblioteka kodów kreskowych obsługuje wiele formatów kodów kreskowych w pakietach MSI?

Tak, IronBarCode obsługuje wiele formatów kodów kreskowych, dzięki czemu jest wszechstronna dla różnych zastosowań biznesowych. Ta elastyczność pozwala programistom na integrację różnych typów kodów kreskowych w aplikacjach pakowanych w MSI zgodnie z określonymi wymaganiami biznesowymi.

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ę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 2,145,441 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package BarCode
uruchom przykład zobacz, jak twoje ciągi zamieniają się w kody kreskowe.