64bit Windows IIS에서 ASP(.NET) COM실행하기

선배와 친구녀석이 다니는 회사에서 이 문제로 2주일간 고생하다가, 같이 좀 봐달라고 백수인 나를 호출했다.
같이 5시간정도 해매다가 우연히 문제를 해결했다. (술 사라고 해야지 -_-)

ASP.Net에서 COM을 쓰는 경우는 드물겠지만, 오래된 ASP라면 많은 COM객체를 사용하고 있을 것이다.
이 페이지들을 64bit Windows에 올리니까 갑자기 오류가 튀어나오기 시작했다.

증상:

ActiveX component can't create object (0x800A01AD) 오류가 발생하면서 COM객체를 생성할 수 없다.

원인:

1번과 2번은 32bit Windows에서도 발생하는 문제지만, 3번은 64bit Windows에서만 발생하는 문제다.

  1. 해당 객체가 필요로 하는 종속 라이브러리가 시스템에 설치되어 있지 않거나
  2. DLL또는 레지스트리에 읽기 권한이 없거나
  3. IIS가 32bit COM 객체를 지원하지 않거나

해결방법:

32bit에서 잘 돌아가던 소스라면, 의심해 볼 사항은 두가지다.
windows server2003부터 강화된 보안 때문이거나,
64bit IIS에서 32bit COM객체를 생성하지 못하도록 막았기 때문이거나.

  1. 해당 COM 객체가 필요로 하는 종속 라이브러리가 시스템에 모두 설치되어 있는지 확인한다.
    Dependency Walker(depends.exe)를 이용하면 편리하게 확인해 볼 수 있다.
    만약 설치되지 않은 DLL이 있다면, 다른 PC에서 복사해 오거나 http://www.dll-files.com 에서 다운로드해서 windows/wow64폴더에 복사해 두면 된다. (64bit인 경우. 32bit라면 windows/system32)
  2. 레지스트리에서 COM객체의 Program ID를 검색해 보면 Class ID와 설치된 경로를 확인할 수 있다.
    이 레지스트리 키에 대해서 IUSER가 읽기 적어도 읽기 권한을 가져야 한다. (COM객체가 인스턴스화 되는 과정을 생각해 보면 당연한 이야기)
    Program ID와 Class ID로 검색해서 나오는 모든 키들에 IUSER 또는 Everyone에 읽기 권한을 주자.
    또, InprocServer32키를 참조해서 DLL(또는 OCX)을 찾은 다음, 해당 DLL에도 읽기 권한을 준다.
  3. 64bit에서 32bit COM을 돌리기 위한 가장 중요한 부분!
    IIS meta데이터에서 32bit COM을 실행 할 수 있도록 설정해 줘야한다.
    우리의 문제도 32bit 호환 모드가 기본값이 "FALSE"여서 발생하는 문제였다.
    다음 링크를 참조하자.
    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/405f5bb5-87a3-43d2-8138-54b75db73aa1.mspx?mfr=true
    결국, 5시간 해매고 5분만에 해결했다. -_-..
  4. 만약, 이 설정을 한 후에 Service Unavailable 오류가 나온다면? event log를 확인해 보면 "Default AppPool에서 오류가 발생했습니다. 블라블라~"하는 로그가 확인될 것이다. 이유는 64Bit ASP.Net runtime이 IIS에 등록되어 있기 때문이다. 32bit 호환 ASP.Net runtime을 등록해 주면 된다.
    다음 링크를 참조하자.
    http://geekswithblogs.net/MattRobertsBlog/archive/2008/04/11/get-your-old-com-based-or-quotasp.net-with-interopquot-web-app.aspx
저작자 표시 비영리 변경 금지

Trackback Address >> http://greenmaru.com/trackback/36 관련글 쓰기

Comment List

  1. BlogIcon 데굴대굴 2009/05/11 18:38 address / modify or delete / reply

    이 오류는 당해봐야 아는 내용이라죠....

  2. BlogIcon 별바람 2009/05/11 22:34 address / modify or delete / reply

    빌게이츠가 난 전재산이 만원밖에 안된다고 말하는거랑 비슷하네요

|  1  | ...  55  |  56  |  57  |  58  |  59  |  60  |  61  |  62  |  63  | ...  94  |