반응형
문제 상황
.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 → 설치 실패 가능성 매우 높음
반응형
'C#' 카테고리의 다른 글
| [RabbitMQ] Windows에서 rabbitmqctl 실행 시 연결 오류 해결 방법 (.erlang.cookie 문제) (1) | 2025.07.10 |
|---|---|
| Fuslogvw 어셈블리 바인딩 실패 추적 도구 사용법 (0) | 2025.02.18 |
| 비동기 환경에서의 스레드 충돌 문제와 해결 방안 (2) | 2025.01.05 |
| error MSB4006 에러 해결 -> .net framework 참조 방식 변경 (1) | 2024.12.27 |
| .NET Core Model 유효성 검사 응답 처리 방법 (0) | 2024.08.26 |