IronBarCode로 C# MSI 설치 프로그램 만들기

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

IronBarCode를 사용하여 MSI 설치 프로그램을 만들려면 솔루션에 Setup Project를 추가하고 필요한 DLL(onnxruntime.dll, IronBarcodeInterop.dllReaderInterop.dll)을 포함한 다음 프로젝트를 빌드하여 배포 가능한 MSI 패키지를 생성하십시오.

MSI (Microsoft Installer)는 소프트웨어의 설치, 업데이트, 제거를 용이하게 하는 윈도우 설치 패키지입니다. MSI를 사용하면 애플리케이션 설치를 위한 표준화된 방법을 제공하며, 이는 특히 기업 배포에 유익합니다. MSI 형식은 롤백 기능, 관리자 설치 지점, Windows Installer 서비스 통합과 같은 고급 기능을 지원합니다.

IronBarCode는 귀하의 기존 애플리케이션과 원활하게 통합하고 손쉬운 배포를 위해 MSI로 변환할 수 있는 도구를 제공합니다. 다양한 환경에서 신뢰할 수 있는 설치를 보장하며, 개발자가 포함 또는 제외할 구성 요소를 선택할 수 있게 합니다. 라이브러리는 다양한 바코드 형식을 지원하여 다양한 비즈니스 애플리케이션에 대해 다재다능성을 제공합니다.

이 튜토리얼은 IronBarCode의 강력한 스캐닝 기능을 활용하는 예제 바코드 애플리케이션에서 MSI 파일을 만드는 방법을 시연합니다.

빠른 시작:클릭 한 번에 MSI 바코드를 생성하고 읽기

IronBarcode의 간단한 API를 사용하여 최소한의 설정으로 MSI 바코드를 생성하고 읽어보세요. 아래 코드 조각은 MSI 바코드 이미지를 작성한 다음 다시 읽는 과정이 얼마나 쉬운지를 보여줍니다. 다 몇 줄만으로 가능합니다.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/BarCode 설치하기

    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 빌드가 작동하려면 필요합니다. 또한, 프로젝트에 NuGet을 통해 IronBarCode를 설치했는지 확인하세요.

Visual Studio Installer Projects 확장이 필요한 이유는 무엇인가요?

이 확장은 Visual Studio 2022에서 MSI 설치 프로그램을 생성하는 데 필요한 설치 프로젝트 템플릿을 제공합니다. 이 확장은 2010 버전 이후 Visual Studio에서 제거된 배포 프로젝트 템플릿을 추가하여 개발자가 기존 Windows Installer 패키지를 만들 수 있게 해줍니다.

어떤 버전의 .NET Framework를 목표로 해야 하나요?

MSI 배포 시나리오와 최대 호환성을 위해 Windows Forms App (.NET Framework)을 사용하세요. IronBarCode는 다양한 .NET 플랫폼을 지원하지만, .NET Framework 버전은 MSI 설치 프로그램이 일반적으로 배포되는 Windows 시스템과의 최대 호환성을 보장합니다.

초기 MSI 설치 프로그램 프로젝트를 어떻게 생성하나요?

이 예제에서는 Windows Forms App (.NET Framework) 프로젝트를 사용하여 기능을 시연합니다. 이 접근 방식은 바코드 스캐닝 데스크톱 애플리케이션에 대한 익숙한 UI 패러다임을 제공합니다.

어떤 프로젝트 유형이 MSI 설치 프로그램에 가장 적합한가요?

Windows Forms 애플리케이션은 MSI로 배포되는 바코드 스캐닝 애플리케이션을 생성하는 가장 단순한 경로를 제공합니다. .NET Framework 외 추가적인 런타임 종속성을 요구하지 않으며, 네이티브 Windows 통합을 제공합니다.

데모 애플리케이션의 핵심 구성 요소는 무엇인가요?

애플리케이션은 파일 대화 상자를 열어 이미지에서 바코드를 스캔하는 버튼이 있는 폼으로 구성되어 있습니다. 이 간단한 인터페이스는 배포 복잡성을 최소화하면서 핵심 기능을 시연합니다. 더 복잡한 시나리오를 위해 PDF에서 바코드 읽기 또는 비동기 바코드 읽기를 탐색해 보세요.

Windows Form에 버튼을 어떻게 추가하나요?

  • 도구 상자로 이동
  • 버튼 검색
  • Windows 폼에 드래그하여 버튼 추가

Visual Studio 도구 상자에 양식에 추가할 수 있는 모든 Windows Forms 섹션 아래에 강조된 버튼 컨트롤이 표시됩니다

버튼 컨트롤은 어디에 있나요?

버튼 컨트롤은 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 바코드 추출을 올바르게 처리하기 위해 PDF 문서에는 BarcodeReader.Read 메서드를 BarcodeReader.ReadPdf로 교체하세요. 또한 최적화된 성능을 위해 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 종속성을 포함한 모든 필수 구성 요소를 단일 배포 가능한 단위로 패키징합니다.

솔루션을 마우스 오른쪽 버튼으로 클릭한 다음 추가 > 새 프로젝트...로 이동합니다.

 related to MSI를 만들기 위한 설정 프로젝트를 어떻게 추가하나요?

MSI 설치 프로그램의 경우, MsiInstallerSample 프로젝트를 다시 Release 모드에서 빌드합니다. 설정 프로젝트를 마우스 오른쪽 버튼으로 클릭한 다음 추가 > 프로젝트 출력...로 이동합니다.

Visual Studio의 Add Project Output Group 대화 상자에서 Solution Explorer가 표시된 SetupProject의 배포 옵션을 보여줍니다

MSI 설치 프로그램이 원활히 실행되도록 하려면 다음 세 파일을 설정 프로젝트에 포함해야 합니다: onnxruntime.dll, IronBarcodeInterop.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

Visual Studio의 파일 대화 상자에서 ReaderInterop.dll을 선택하여 솔루션 탐색기에 종속성이 표시된 Setup 프로젝트에 추가합니다

이 파일들 중 하나라도 누락되면 이 문제 해결 기사에 설명된 대로 다음과 같은 예외 메시지가 발생할 수 있습니다: MSI 설치 프로그램 생성 중 누락된 DLL

마지막으로, 설정 프로젝트를 빌드합니다. 설치 프로그램은 다음 위치에 있습니다: MsiInstallerSample\SetupProject\Release

왜 이 특정 DLL이 필요한가요?

IronBarCode는 ML 기반 바코드 감지 및 처리 기능을 위해 이러한 네이티브 라이브러리에 의존합니다. onnxruntime.dll은 기계 학습 런타임을 제공하며, IronBarcodeInterop.dll과 ReaderInterop.dll은 네이티브 바코드 처리 작업을 처리합니다. 이 구성 요소들은 이미지 보정오류 허용과 같은 고급 기능을 가능하게 합니다.

이 DLL들을 포함하지 않으면 어떻게 되나요?

DLL들이 누락되면 사용자가 설치 후 바코드를 스캔하려고 할 때 런타임 예외가 발생합니다. 애플리케이션은 IronBarCode를 제대로 초기화하지 못할 수 있으며, FileNotFoundException 또는 DllNotFoundException 오류가 발생할 수 있습니다.

프로젝트 출력 설정을 어떻게 구성하나요?

프로젝트 출력을 추가할 때 "주 출력"을 선택하여 주 실행 파일과 그 관리 종속성을 포함합니다. 모든 .NET 어셈블리가 포함되도록 하며, 위에서 언급한 네이티브 DLL도 수동으로 추가해야 합니다.

MSI 설치 프로그램을 어떻게 실행하고 테스트하나요?

MSI 파일을 사용하여 애플리케이션을 설치하여 모든 것이 원활하게 작동하는지 확인합니다. 테스트는 설치 및 제거 시나리오를 모두 포함하여 적절한 배포를 확인해야 합니다.

Visual Studio의 Release 폴더에 setup.exe 및 설치 파일이 포함된 완료된 설치 프로그램 빌드가 표시됩니다

테스트 중에 무엇을 확인해야 하나요?

애플리케이션이 제대로 시작되고, 파일 대화 상자를 열 수 있으며, 테스트 이미지에서 바코드를 성공적으로 스캔할 수 있는지 확인합니다. 종합적인 기능을 보장하기 위해 지원되는 바코드 형식으로 테스트하십시오. 또한 배포 환경에서 라이선스 키 적용이 제대로 작동하는지 확인하십시오.

설치 문제를 어떻게 해결할 수 있나요?

Windows 설치 로그를 활성화하여 설치 실패나 누락된 구성 요소에 대한 자세한 정보를 캡처합니다. Windows 이벤트 뷰어에서 추가적인 오류 세부 정보를 확인하고 일반적인 배포 문제에 대한 문제 해결 가이드를 참조하십시오.

전체 샘플 프로젝트를 어디에서 다운로드할 수 있습니까?

이 가이드의 전체 코드를 다운로드할 수 있습니다. Visual Studio에서 WinFormApp 프로젝트로 열 수 있는 압축 파일로 제공됩니다. 샘플에는 필요한 모든 구성 요소가 포함되어 있으며 MSI 배포를 위한 모범 사례를 보여줍니다.

WinForm MSI 앱 프로젝트 다운로드

샘플 프로젝트에는 무엇이 포함되어 있나요?

다운로드에는 Windows Forms 애플리케이션과 설정된 Setup 프로젝트가 포함된 완전한 Visual Studio 솔루션이 포함되어 있습니다. 테스트용 샘플 바코드 이미지가 포함되어 있으며 배포 시나리오에 대한 올바른 라이센스 키 구성을 보여줍니다.

다운로드한 프로젝트를 여는 방법은?

ZIP 파일을 추출하고 Visual Studio 2022에서 Installer Projects 확장이 설치된 상태로 .sln 파일을 여십시오. NuGet 패키지 관리자를 통해 IronBarCode의 최신 버전을 설치하였는지 확인하세요. 자세한 설정 지침은 API 문서를 참조하세요.

자주 묻는 질문

바코드 애플리케이션이 포함된 MSI 설치 프로그램을 만들 때 필요한 DLL 파일은 무엇입니까?

IronBarCode를 사용하여 MSI 설치 프로그램을 만들 때는 onnxruntime.dll, IronBarcodeInterop.dll, ReaderInterop.dll이라는 세 가지 필수 DLL 파일을 포함해야 합니다. 이러한 파일은 MSI 패키지를 통해 애플리케이션이 배포될 때 IronBarCode가 제대로 작동하도록 해줍니다.

바코드 애플리케이션용 MSI 설치 프로그램을 만들기 전에 필요한 사전 요구 사항은 무엇입니까?

IronBarCode를 사용하여 MSI 설치 프로그램을 만들기 전에 Visual Studio 2022용 Microsoft Visual Studio Installer Projects 확장 프로그램을 다운로드하여 설치해야 합니다. 또한 NuGet 패키지 관리자를 통해 IronBarCode가 프로젝트에 설치되어 있는지 확인하십시오.

C#에서 MSI 바코드를 빠르게 생성하고 읽는 방법은 무엇인가요?

IronBarCode는 MSI 바코드를 생성하고 읽는 간단한 API를 제공합니다. BarcodeWriter.CreateBarcode() 메서드를 사용하여 MSI 인코딩 유형으로 MSI 바코드를 생성하고 이미지 파일로 저장한 다음, BarcodeReader.Read() 메서드를 사용하여 리더 옵션에 BarcodeEncoding.MSI를 지정하여 다시 읽을 수 있습니다.

바코드 애플리케이션 배포에 MSI 설치 프로그램을 사용하는 장점은 무엇입니까?

MSI 설치 프로그램은 기업 환경에 적합한 표준화된 설치 방식을 제공합니다. IronBarCode와 함께 사용하면 롤백 기능, 관리자 설치 지점, Windows Installer 서비스 통합을 제공하고 다양한 환경에서 안정적인 설치를 보장하며 개발자가 포함할 구성 요소를 선택할 수 있도록 합니다.

바코드 라이브러리는 MSI 패키지에서 여러 바코드 형식을 지원합니까?

네, IronBarCode는 다양한 바코드 형식을 지원하여 여러 비즈니스 애플리케이션에 활용할 수 있습니다. 이러한 유연성을 통해 개발자는 특정 비즈니스 요구 사항에 따라 다양한 바코드 유형을 MSI 패키지 애플리케이션에 통합할 수 있습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

시작할 준비 되셨나요?
Nuget 다운로드 2,108,094 | 버전: 2026.3 방금 출시되었습니다
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package BarCode
샘플을 실행하세요 실이 바코드로 변하는 모습을 지켜보세요.