이 블로그는 http://blog.greenmaru.com으로 이동 하였습니다.
2010년 12월 이후 업데이트는 새로운 블로그를 통해서만 이루어 집니다. 현재 보고 계신 페이지는 2011년 12월에 없어질 예정 이므로, 필요하신 분께서는 새로운 블로그로 링크를 변경해 주시기 바랍니다.
번거롭게 해 드려 죄송합니다.
<greenb>

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 관련글 쓰기

  1. Subject : [번역] 64비트 윈도우에서 32-비트 ASP.NET을 실행하도록 IIS 설정하기.

    Tracked from 알락블록 2011/01/06 20:28 delete

    http://msdn.microsoft.com/en-us/library/cc737351%28v=ws.10%29.aspx Configuring IIS to Run 32-bit ASP.NET Applications on 64-bit Windows 64비트 윈도우에서 32-비트 ASP.NET을 실행하도록 IIS 설정하기. Updated: August 22, 2005 업데이트: 2005년 8월 22일 번역: 2011년 1월 6일 Applies To: Win..

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

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

  3. 감사 2010/08/13 10:33 address / modify or delete / reply

    감사합니다. 퍼갈께요.

  4. BlogIcon 김성환 2011/11/21 20:43 address / modify or delete / reply

    짚신도 짝이 있다

  5. BlogIcon kitchens glasgow 2011/11/25 05:01 address / modify or delete / reply

    원숭이도 나무에서 떨어진다.

  6. BlogIcon Trust Deed 2011/12/03 01:33 address / modify or delete / reply

    떡 본 김에 제사 지낸다

  7. BlogIcon 아가 2011/12/07 19:47 address / modify or delete / reply

    짚신도 짝이 있다

  8. BlogIcon Trust Deed 2011/12/07 23:27 address / modify or delete / reply

    이것은 감사의 말씀을 매우 짧은 주석입니다

  9. BlogIcon aberdeen escort 2011/12/13 23:28 address / modify or delete / reply

    과부 사정 홀아비가 안다

  10. BlogIcon 박기동 2012/01/05 08:10 address / modify or delete / reply

    콩 심은데 콩나고, 팥 심은데 팥난다.

  11. BlogIcon 조용형 2012/01/07 04:20 address / modify or delete / reply

    당신은 팹, 훌륭한 문서입니다

  12. BlogIcon 유병수 2012/01/11 01:48 address / modify or delete / reply

    매도 먼저 맞는 게 낫다

  13. BlogIcon 2012/01/13 11:54 address / modify or delete / reply

    당신은 전체에 서있다면 당신은 파고있어, 당신은 파고를 중지해야합니다

|  1  | ...  65  |  66  |  67  |  68  |  69  |  70  |  71  |  72  |  73  | ...  104  |