使用 IronBarCode 建立 C# MSI 安裝程序

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

若要使用 IronBarCode 建立 MSI 安裝程序,請將安裝項目新增至您的解決方案中,包含所需的 DLL( onnxruntime.dllIronBarcodeInterop.dllReaderInterop.dll ),然後建置專案以產生可分發的 MSI 套件。

MSI(Microsoft Installer)是一種 Windows 安裝包,可輕鬆進行軟體安裝、更新和卸載。 使用 MSI 提供了一種標準化的應用程式安裝方法,這對於企業部署尤其有利。 MSI 格式支援回溯功能、管理安裝點和 Windows Installer 服務整合等進階功能。

IronBarCode 提供工具,可與您現有的應用程式無縫集成,並將其轉換為 MSI 檔案以便於分發。 它確保在各種環境下可靠安裝,並允許開發人員選擇要包含或排除的組件。 該庫支援多種條碼格式,使其適用於各種商業應用。

本教學課程示範如何從利用 IronBarCode 強大的掃描功能的範例條碼應用程式建立 MSI 檔案。

快速入門:一鍵產生和讀取 MSI 條碼

使用 IronBarcode 簡潔易用的 API,只需極少的設定即可建立和讀取 MSI 條碼。以下程式碼片段展示瞭如何輕鬆地寫入 MSI 條碼圖像,然後再將其讀取回來——所有操作只需幾行程式碼即可完成。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronBarcode

    PM > Install-Package BarCode

  2. 複製並運行這段程式碼。

    var msiImg = IronBarCode.BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.MSI).SaveAsImage("msi.png");
    var results = IronBarCode.BarcodeReader.Read("msi.png", new BarcodeReaderOptions { ExpectBarcodeTypes = BarcodeEncoding.MSI });
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronBarcode,免費試用!
    arrow pointer

開始之前我需要具備哪些先決條件?

在開始專案之前,請下載[Microsoft Visual Studio Installer Projects 擴充功能]( 要讓 MSI 建置正常運作,需要從 https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects 取得該專案。 此外,請確保已透過 NuGet 在您的專案中安裝了 IronBarCode。

為什麼需要 Visual Studio Installer Projects 擴充功能?

此擴充功能提供了在 Visual Studio 2022 中建立 MSI 安裝程式所需的安裝專案範本。此擴充功能新增了在 Visual Studio 2010 版本之後被移除的部署專案模板,使開發人員能夠建立傳統的 Windows Installer 套件。

我應該使用哪個版本的 .NET Framework?

使用 Windows Forms 應用程式 (.NET Framework) 可最大程度地相容於 MSI 部署方案。 雖然 IronBarCode 支援各種 .NET 平台,但 .NET Framework 版本可確保與 Windows 系統(MSI 安裝程式通常部署在 Windows 系統上)實現最廣泛的兼容性。

如何建立初始 MSI 安裝程式專案?

本範例使用 Windows Forms 應用程式 (.NET Framework) 專案來示範其功能。 這種方法為桌面條碼掃描應用程式提供了一種熟悉的使用者介面範式。

哪種項目類型最適合 MSI 安裝程式?

Windows Forms 應用程式為建立 MSI 部署的條碼掃描應用程式提供了最直接的途徑。 它們提供原生 Windows 集成,除了 .NET Framework 之外,不需要額外的執行時間相依性。

演示應用程式的關鍵組成部分是什麼?

該應用程式包含一個表單,表單上有一個按鈕,點擊該按鈕會打開一個檔案對話框,用於掃描圖像中的條碼。 這個簡潔的介面展示了核心功能,同時最大限度地降低了部署的複雜性。 對於更高級的場景,可以考慮探索從 PDF 讀取條碼或實現非同步條碼讀取

如何在 Windows 表單中新增按鈕?

  • 導航至工具箱 搜尋按鈕
  • 將按鈕拖曳到 Windows 表單上,即可新增按鈕。

Visual Studio 工具箱中"所有 Windows 表單"區段下的按鈕控制項已高亮顯示,可用於新增至表單。

按鈕控制在哪裡?

Button控制項位於Visual Studio工具箱的"常用控制項"部分。 如果工具箱不可見,請從"視圖">"工具箱"開啟它,或按 Ctrl+Alt+X。

按鈕在表單上的位置應該如何設定?

將按鈕置於表單中心或使用者自然期望找到主要操作的位置。 為了確保應用程式之間使用者體驗的一致性,請考慮遵循 Windows UI 指南。

如何編輯按鈕代碼以支援條碼掃描?

雙擊按鈕元件即可存取窗體的 C# 程式碼。 以下是表單元件的邏輯——它接收條碼並嘗試掃描它。 這段程式碼只能掃描影像,不能掃描PDF檔。 對 PDF 文件使用ReadPdf方法。 有關完整的條碼讀取選項,請參閱條碼讀取器設定文件

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}");
                    }
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

條碼讀取邏輯的關鍵組成部分是什麼?

程式碼使用OpenFileDialog選擇影像,配置BarcodeReaderOptions進行詳細掃描,並透過MessageBox顯示結果。 您可以根據效能需求調整閱讀速度選項ExpectMultipleBarcodes設定允許從單一影像讀取多個條碼

生產環境應該如何處理錯誤?

請新增適當的錯誤日誌記錄和使用者友好的錯誤訊息,而不是顯示原始的異常詳細資訊。 考慮在條碼無法識別的情況下實施重試邏輯,並向使用者提供有關影像品質要求的指導。

我可以用這段程式碼掃描PDF文件嗎?

對於 PDF 文件,請將BarcodeReader.Read方法替換為BarcodeReader.ReadPdf ,以正確處理 PDF 條碼提取。 您也可以探索PDF 專用條碼閱讀器設置,以優化效能。

以下是如何修改程式碼以支援 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
}
$vbLabelText   $csharpLabel

如何新增安裝專案以建立 MSI 檔案?

設定好表單及其控制器邏輯後,請向現有解決方案新增安裝項目以建立 MSI 安裝程式。 安裝專案可讓您為剛剛建立的應用程式建立安裝程式。 此程序將所有必要的元件(包括 IronBarCode 依賴項)打包到一個可部署的單元中。

右鍵單擊解決方案,然後選擇"新增" > "新專案..."

Visual Studio 解決方案資源管理器上下文功能表顯示"新增">"新項目"選項,用於建立安裝項目

對於 MSI 安裝程序,請在 Release 模式下再次建置 MsiInstallerSample 專案。 右鍵單擊"設定項目",然後選擇"新增" > "項目輸出…"

Visual Studio 新增專案輸出群組對話方塊顯示 SetupProject 的部署選項,並可見解決方案資源管理器

為確保 MSI 安裝程式順利運行,您必須在安裝專案中包含以下三個檔案: onnxruntime.dllIronBarcodeInterop.dllReaderInterop.dll 。 這些文件是在以發布模式建立專案時產生的:

  • 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

在 Visual Studio 檔案對話方塊中選擇 ReaderInterop.dll 以新增至安裝項目,並在解決方案資源管理器中顯示依賴項

如果缺少任何這些文件,您可能會遇到以下異常訊息,如這篇故障排除文章所述:在建立 MSI 安裝程式時缺少 DLL 文件

最後,建置安裝專案。 安裝程式位於: MsiInstallerSample\SetupProject\Release

為什麼需要這些特定的 DLL 檔案?

IronBarCode 依賴這些原生程式庫來實現基於機器學習的條碼偵測和處理功能。 onnxruntime.dll 提供機器學習運行時,而 IronBarcodeInterop.dll 和 ReaderInterop.dll 則處理原生條碼處理操作。 這些組件實現了影像校正容錯等高級功能。

如果我忘記包含這些 DLL 檔案會發生什麼?

安裝後,如果缺少 DLL 文件,使用者嘗試掃描條碼時將會出現執行時異常。 應用程式可能無法正確初始化 IronBarCode,導致 FileNotFoundException 或 DllNotFoundException 錯誤。

如何配置專案輸出設定?

新增專案輸出時,選擇"主要輸出"以包含主可執行檔及其託管相依性。 這樣可以確保包含所有 .NET 程序集,但請記住手動新增上面提到的本機 DLL。

如何運行和測試 MSI 安裝程式?

請使用 MSI 檔案安裝應用程序,以確保一切順利運行。 測試應涵蓋安裝和卸載兩種場景,以驗證部署是否正確。

Visual Studio 顯示已完成的安裝程式構建,其中包含 Release 資料夾以及 setup.exe 和安裝程式檔案

測試過程中我應該檢查哪些內容?

驗證應用程式是否能正確啟動,是否能開啟檔案對話框,以及能否成功掃描測試影像中的條碼。 使用各種支援的條碼格式進行測試,以確保功能全面。 同時驗證許可證密鑰應用程式在已部署環境中是否正常運作。

如何排除安裝問題?

啟用 Windows Installer 日誌記錄,以擷取任何安裝失敗或缺少元件的詳細資訊。 查看 Windows 事件檢視器以取得更多錯誤詳細信息,並查閱故障排除指南以解決常見的部署問題。

在哪裡可以下載完整的範例專案?

您可以下載本指南的完整程式碼。程式碼以壓縮檔案的形式提供,您可以在 Visual Studio 中將其作為 WinFormApp 專案開啟。 此範例包含所有必要的配置,並示範了 MSI 部署的最佳實務。

下載 WinForm MSI 應用程式項目

範例項目包含哪些內容?

下載內容包含一個完整的 Visual Studio 解決方案,其中包含 Windows 窗體應用程式和已設定的安裝項目。 它包含用於測試的範例條碼影像,並示範了部署場景的正確許可證金鑰配置

如何開啟下載的項目?

解壓縮 ZIP 文件,然後在安裝了 Installer Projects 擴充功能的 Visual Studio 2022 中開啟.sln文件。 請確保您已透過 NuGet 套件管理器安裝了最新版本的 IronBarCode。 有關更詳細的設定說明,請參閱API 文件

常見問題解答

使用 BarCode 應用程式建立 MSI 安裝程式時,需要哪些 DLL 檔案?

在使用 IronBarcode 創建 MSI 安裝程式時,您需要包含三個重要的 DLL 檔案:onnxruntime.dll、IronBarcodeInterop.dll 和 ReaderInterop.dll。這些檔案可確保當您的應用程式透過 MSI 套件部署時,IronBarcode 能正常運作。

在為我的 BarCode 應用程式建立 MSI 安裝程式之前,我需要哪些先決條件?

在使用 IronBarcode 建立 MSI 安裝程式之前,您需要下載並安裝 Visual Studio 2022 的 Microsoft Visual Studio Installer Projects 擴充套件。此外,確保 IronBarCode 已經透過 NuGet 套件管理程式安裝在您的專案中。

如何在 C# 中快速生成和讀取 MSI BarCode?

IronBarCode 提供一個簡單的 API 來產生和讀取 MSI 條碼。您可以使用BarcodeWriter.CreateBarcode()以MSI編碼類型創建一個MSI條碼,將其保存為圖像,然後在讀取器選項中指定BarcodeEncoding.MSI,使用BarcodeReader.Read()將其讀回。

使用 MSI 安裝程式發佈 BarCode 應用程式有哪些優點?

MSI 安裝程式提供標準化的安裝方法,是企業部署的理想選擇。當與 IronBarcode 結合時,它們可提供回滾功能、管理安裝點、Windows Installer 服務整合,並確保在各種環境中進行可靠的安裝,同時允許開發人員選擇包含哪些元件。

條碼庫是否支援 MSI 套件中的多種條碼格式?

是的,IronBarCode 支援多種條碼格式,使其適用於各種商業應用程式。這種靈活性允許開發人員根據特定的業務需求,將不同的條碼類型整合到他們的 MSI 套件應用程式中。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。

準備好開始了嗎?
Nuget 下載 2,035,202 | 版本: 2025.12 剛剛發布