C#

[MSI 설치 오류] Setup Project에서 BadImageFormatException 발생 원인과 해결 (Run64Bit) - Error 1001

검은고양이개발자 2026. 1. 15. 14:37
반응형

문제 상황

.NET Framework 기반으로 개발된 프로그램을
Visual Studio Setup Project (.vdproj) 를 이용해 MSI 설치 파일로 배포하던 중,
설치 과정에서 아래와 같은 오류가 발생했다.

Error 1001. 설치를 초기화하는 동안 예외가 발생했습니다.
System.BadImageFormatException
잘못된 형식의 프로그램을 로드하려고 했습니다.

설치 화면은 정상적으로 진행되다가,
중간에 갑자기 오류가 발생하며 롤백되는 현상이었다.


환경 정보

  • .NET Framework 기반 응용 프로그램
  • 내부에 타사 SDK DLL 포함
  • SDK DLL은 x64 전용
  • 배포 방식: Visual Studio Setup Project (.vdproj)
  • Custom Action:
    • Install / Commit / Rollback / Uninstall
    • Primary Output 사용
    • InstallerClass = True

오류 원인 분석

Custom Action 설정을 확인해보니 다음과 같은 상태였다.

항목값
InstallerClass True
Run64Bit False

이 설정의 의미는 다음과 같다.

1. InstallerClass = True

  • MSI가 InstallUtil.exe 를 사용해 설치 작업 수행
  • (Primary Output 기반 Custom Action의 기본 동작)

2. Run64Bit = False

  • Custom Action이 32비트(x86) 로 실행됨
  • 결과적으로 x86 InstallUtil.exe 가 사용됨

3. 문제의 핵심

  • 실행 파일 및 SDK DLL은 x64
  • InstallUtil은 x86
  • 비트수 불일치로 인해
    BadImageFormatException 발생

즉,

x64 프로그램을 x86 InstallUtil로 로드하려다 실패한 것


해결 방법

Custom Action의 속성 중 Run64Bit 값을 True로 변경했다.

변경 내용

Custom Action (Primary Output) → Properties

항목변경 전변경 후
InstallerClass True True
Run64Bit False ✅ True

결과

  • MSI 설치 정상 진행
  • 서비스 정상 설치
  • SDK DLL 로딩 문제 없음
  • Error 1001 / BadImageFormatException 재발 X

왜 Run64Bit=True로 해결됐을까?

Run64Bit = True 설정 시:

  • Custom Action이 64비트 컨텍스트로 실행
  • x64 InstallUtil이 사용됨
  • x64 SDK DLL 정상 로드 가능

즉,
설치 과정 전체의 비트수를 x64로 맞춰준 것


    •  

정리

✔ Setup Project에서 MSI 설치 중
BadImageFormatException 발생 시
x86 / x64 비트수 불일치를 가장 먼저 의심할 것

✔ 타사 SDK DLL이 x64라면:

  • Custom Action의 Run64Bit=True 필수

✔ InstallerClass=True 상태에서:

  • Run64Bit=False → 설치 실패 가능성 매우 높음

 

반응형