'BadImageFormatException windows installer'에 해당되는 글 1건

  1. 2014.11.06 [issue]Window Installer로 64bit 빌드된 윈도우 서비스 설치시 BadImageFormatExceptioin 예외

64bit 로 빌드된 윈도우 서비스 등록시 BadImageFormatException

 

윈도우 서비스 프로그램을 개발하고 윈도우 인스톨러를 추가하여 설치 패키지를 만들고 나서 실행하려고 하면 다음과 같이 BadImageFormatException이라는 에러가 발생하면서 윈도우 서비스가 등록 안되는 이슈가 발생했다.

 

 

BadImageoFormatException은 실행파일이 참조한는 파일이 다른 bit로 빌드된 경우 발생하는 에러라고 하는데, 이미 윈도우 인스톨러로 설치 하고자 하는 윈도우 서비스 프로젝트와 기타 프로그램 프로젝트들 모두 64bit로 빌드하기로 한 것은 확인 했고, 윈도우 인스톨러 또한 64bit를 target으로 빌드되도록 한 것도 확인 했기 때문에 당췌 어디서 에러가 발생했는지 감을 잡을 수 없었다.

 

하지만 세상에 착하면서도 똑똑한 프로그래머들이 많은지, 이미 이런 문제에 대한 원인과 해결책까지 스택오버플로우에 나와있었다.

(http://stackoverflow.com/questions/10275106/badimageformatexception-x64-issue)

 

결론부터 말하자면, 이 문제는 윈도우 인스톨러가 빌드된 윈도우 서비스 프로그램을 타겟 파일 시스템에 복사한 뒤 InstallUtill.exe라는 프로그램을 이용해서 서비스 등록을 시키는데, 이 InstallUtill.exe 파일이 참조하는 InstallUtillLib.dll의 bit가 윈도우 서비스의 타겟 비트와 달라서 발생하는 이슈라고 한다.

 

따라서 윈도우 인스톨러가 서비스 등록에 사용할 (정확히는 InstallUtill.exe가) InstallUtillLib.dll을 윈도우 서비스의 타겟 비트와 동일하게 선정해주면 된다.

 

C:\Windows\Microsoft.NET\Framework64\v4.0.30319 그리고

C:\Windows\Microsoft.NET\Framework\v4.0.30319 에는

각 bit에 맞는 64bit, 32bit 짜리 InstallUtill.exe와 InstallUtillLib.dll이 있다고 한다.

 

그런데 이 과정은 Visual Studio에서는 설정할 방법은 없고 Orca.exe라는 외부 프로그램을 사용해야 하는데 ( Visual Studio에서 설정할 수 있는지는 나중에 더 찾아 봐야 하겠지만..) 그 과정은 아래와 같다.

 

step1. Orca.exe를 설치한다.

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 에 있는 Orca.msi를 이용해서 설치한다. Next만 누르면 된다.

 

step2. Orca상에서빌드한 msi파일을 연다.

Orca.exe의 돌고래 아이콘이 앙증맞다.

 

 

step3. Tables에서 Binary탭을 클릭하여 오른쪽 창의 InstallUtill의 binary data부분을 더블클릭한다. "read binary from file name"을 클릭해 놓고 brows버튼을 눌러 원하는 비트의 InstallUtillLib.dll파일을 찾아 설정한 후 Orca.exe에서 msi파일을 저장하고 종료한다.

 

 

이렇게 하면, 정상적으로 윈도우 서비스가 윈도우 인스톨러를 가지고 등록되는 것을 볼 수 있었다. 세상엔 참 착하고 능력있는 프로그래머가 많다.

 

 

 

 

 

 

Posted by 굿쟌
,