Creating a MSI Installer with IronBarCode

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

MSI(Microsoft 安裝程式)是一種 Windows 安裝包,可促進軟件安裝、更新和刪除的管理。 使用 MSI 提供了一種標準化的應用程序安裝方法,這對企業級部署尤其有利。

IronBarCode 提供了工具以無縫集成到您現有的應用程序中,並將其轉換為便於分發的 MSI。 它確保在各種環境中的可靠安裝,並允許開發人員選擇要包含或排除的組件。

本教程將簡要演示如何從示例條碼應用程式創建 MSI 文件。

快速入門:單擊生成和讀取 MSI 條碼

使用 IronBarcode 的簡單 API,通過最少的設置,即可創建和讀取 MSI 條碼。下面的代碼片段展示了如何輕鬆編寫 MSI 條碼圖像,然後讀取它——所有操作僅需幾行代碼。

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. Copy and run this code snippet.

    var msiImg = IronBarCode.BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.MSI).SaveAsImage("msi.png");
    var results = IronBarCode.BarcodeReader.Read("msi.png", new BarcodeReaderOptions { ExpectBarcodeTypes = BarcodeEncoding.MSI });
  3. Deploy to test on your live environment

    Start using IronBarcode in your project today with a free trial
    arrow pointer

立即開始在您的項目中使用 IronBarcode 並免費試用。

第一步:
green arrow pointer

先決條件

在我們開始項目之前,請下載 Microsoft Visual Studio Installer Projects 擴充,以便 MSI 構建正常工作。

創建 MSI 安裝程式

我們將使用 Windows 窗體應用程序(.NET 框架)項目來演示該功能。

添加按鈕

  • 導航到工具箱

  • 搜索按鈕
  • 將按鈕拖拽到窗體上。 添加按鈕

編輯按鈕代碼

雙擊按鈕元件以訪問窗體的 C# 代碼。

下面是窗體元件的邏輯,它接收條碼並嘗試掃描它。 此代碼僅掃描圖像,不適用於 PDF。 使用 ReadPdf 方法處理 PDF 文檔。 ## 添加設置項目

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}");
                    }
                }
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

在設置窗體及其控制器邏輯後,我們需要向現有解決方案中添加一個設置項目以創建 MSI 安裝程式。

設置項目允許我們為剛創建的應用程序構建安裝程式。 右鍵單擊解決方案,然後轉到 添加 > 新項目...

添加設置項目

對於 MSI 安裝程式,再次使用 Release 模式構建 MsiInstallerSample 項目。

右鍵單擊設置項目,然後轉到 添加 > 項目輸出... 添加項目輸出

為了確保 MSI 安裝程式的順利運行,必須在設置項目中包括以下三個文件:onnxruntime.dllIronBarcodeInterop.dllReaderInterop.dll

這些文件在 Release 模式下構建項目時生成: - onnxruntime.dll:位於 MsiInstallerSample\MsiInstallerSample\bin\Release

  • IronBarcodeInterop.dll:位於 MsiInstallerSample\MsiInstallerSample\bin\Release\runtimes\win-x86\native
  • ReaderInterop.dll:位於 MsiInstallerSample\MsiInstallerSample\bin\Release\runtimes\win-x86\native 添加額外 DLL

如果缺少任何這些文件,您可能會收到如下故障排除文章中提到的異常消息:創建 MSI 安裝程式時缺少 DLL

最後,構建設置項目。

安裝程式將位於:MsiInstallerSample\SetupProject\Release ## 運行並測試安裝程式

我們使用 MSI 文件安裝應用程序以確保一切運行正常。

下載 MSI 安裝程式示例項目

下載 MSI 安裝程式示例項目

您可以下載本指南的完整代碼。它是一個壓縮文件,您可以在 Visual Studio 中以 WinFormApp 項目形式打開。

下載 WinForm MSI 應用程式項目

Download the WinForm MSI App Project

常見問題解答

什麼是IronBarCode?

IronBarCode是一個函式庫,允許開發人員在.NET應用程式中讀取、寫入和產生條碼。它支援多種條碼格式,並且設計易於整合。

如何使用 IronBarCode 建立 MSI 安裝程式?

要使用 IronBarCode 建立 MSI 安裝程序,您需要將 IronBarCode 庫整合到您的應用程式中,並按照使用 Visual Studio Installer Projects 等工具建立 MSI 安裝程序的標準步驟進行操作。

在 MSI 安裝程式中使用 IronBarCode 有什麼好處?

將 IronBarCode 整合到 MSI 安裝程式中,可以簡化需要條碼功能的應用程式的部署過程,確保所有必要的元件都正確安裝在最終用戶的系統上。

IronBarCode支援哪些條碼格式?

IronBarCode 支援多種條碼格式,包括 QR 碼、UPC、EAN、Code 39、Code 128 等,使其能夠靈活滿足各種應用需求。

是否可以使用 IronBarCode 自訂條碼外觀?

是的,IronBarCode 允許自訂條碼外觀,包括顏色、大小和文字註釋,以滿足您應用程式的特定設計要求。

我需要特定的工具才能將 IronBarCode 整合到 MSI 安裝程式中嗎?

您可以使用 Visual Studio 等常用開發工具將 IronBarCode 整合到您的應用程式中,並建立 MSI 安裝程式。 IronBarCode 程式庫與 .NET 相容,因此使用該框架的開發人員可以輕鬆存取它。

IronBarCode 可以讀取和寫入二維條碼嗎?

是的,IronBarCode 可以讀取和寫入一維和二維條碼,包括二維碼、資料矩陣碼等,提供全面的條碼功能。

使用 IronBarCode 的系統需求是什麼?

IronBarCode 需要 .NET Framework 環境才能運作。它相容於 .NET Core、.NET 5/6 及更早版本,確保在不同專案中具有廣泛的兼容性。

我該如何開始使用IronBarCode?

要開始使用 IronBarCode,您可以從 Iron Software 網站下載該庫,查看文檔,並按照提供的範例和指南將其整合到您的 .NET 專案中。

IronBarCode用戶可以獲得技術支援嗎?

是的,Iron Software 為 IronBarCode 用戶提供技術支持,包括文件、教程和直接支援選項,以幫助解決整合和使用問題。

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'name'

Filename: sections/author_component.php

Line Number: 18

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 18
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'title'

Filename: sections/author_component.php

Line Number: 38

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 38
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'comment'

Filename: sections/author_component.php

Line Number: 48

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 48
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

準備好開始了嗎?
Nuget 下載 1,935,276 | 版本: 2025.11 剛剛發布