2011-02-14 7 views
0

갑자기 일부 클라이언트에서 ActiveX 구성 요소가 MSXML2.DOMDocument를 인스턴스화하려고 할 때 개체 오류를 만들 수 없습니다. 우리는 msxml2.dll 및 다른 xml-dll에 대한 참조를 설정하는 컴퓨터에 작성된 VB6 응용 프로그램에 대해 설명합니다. 배포를 수행 할 때마다 매번 msxml2.dll msxml2a.dll 및 msxml2r.dll을 배포하므로 문제가 발생하지 않았습니다.msxml .dll의 이상한 동작

이번이 아닙니다. Windows 환경 자체가 변경된 것처럼 마치 등록 취소/재 등록 프로세스를 거부합니다. 클라이언트 컴퓨터가 MSXML2.DOMDocument를 성공적으로 인스턴스화하도록 할 수 없습니다. 더 이상하게 만들기 : system32 폴더에있는 모든 msxml2 * 파일의 이름을 변경/등록 취소/삭제할 때 문제가 발생하지 않는 클라이언트가 계속 작동하므로 .dll이 필요없는 것 같습니다! 일반적으로이 클라이언트에는 msxml3, 4 및 6이 함께 설치됩니다. 나는 하드 드라이브를 검색했고 거기에 숨어있는 msxml2의 다른 복사본이 없습니다.

누군가이 곤란한 문제를 해결하기 위해 도움을받을 수 있습니까?

EDIT : 간단한 세트 doc = 새 MSXML2.DOMDocument 만 있으면 오류가 발생할 수 있습니다.

+0

개체를 만들 수없는 경우에 대해 더 구체적인 오류가 있습니까? 다음 단계는 레지스트리가 될 것입니다. MSXML2.DOMDocument 클래스를 찾아 구현 클래스에 따라 이동하십시오. 그게 당신이 사용하고있는 개체에 사용되는 .dll을 보여 주어야합니다. MSXML과 같은 COM 객체를 레지스트리에 등록 할 때 COM 객체를 등록 할 때. 'regsvr32 MSXML2.DLL'명령을 사용하면 방금 등록한 .dll을 사용하도록 레지스트리 값을 재설정합니다. 배달 된 msxml2.dll을 "regsvr32"설치 하시겠습니까? –

+0

@ Marvin Smit : 우리는 Inno Setup을 사용하고 있습니다. 그렇습니다. 등록을 취소하고 다시 등록했습니다.dll은 몇 년 동안. – Dabblernl

답변

1

많은 라이브러리가 시스템에서 관리됩니다. "실제"라이브러리가 SxS 캐시에 있기 때문에 System32에 덤핑하는 것은 지금까지만 가능합니다.

승인 된 배포 기술을 사용하려는 이유 중 하나이며 Microsoft에서 제공하는 MSI 패키지 (또는 EXE로 래핑 된 패키지)를 단순히 사용하지 않으면 MSXML에 약간의 복잡성이 있습니다. MSXML 4는 MSXML 4에서만 지원되는 "SxS 설치"와 더 많은 관련이있는 각 업데이트에 대해 MSM 및 CAB 형식으로도 사용할 수있었습니다 (MSXML 6에서는 좋지 않은 아이디어로 삭제됨).

좋은 소식은 모든 서버 2003을 제외하고 OS를 지원하는 것이 이미 MSXML 6 포함, 그래서 그 대상과 집없는 배포 요구 사항을 무료로 위치 :

MSXML6 is now in-band, MSI setup headaches should now (almost) be gone..

MSXML 3은 대부분의 Windows 볼 수 있습니다 버전은 더 이상 돌아 가지 않고 적어도 Win98에 배포 될 수 있습니다. Microsoft XML Parser (MSXML) 3.0

오랜 시간 동안 생각한 것처럼 설치 및 구성 요소 등록 및 서비스가 제대로 작동하지 않습니다. 기존 스크립트 설정 도구를 사용하는 대신 응용 프로그램을 MSI 패키지로 패키지하는 것이 훨씬 안전합니다. MDAC 및 MSXML과 같은 복잡한 패키지 조각을 배포하지 마십시오.

어떤 특정 MSXML 버전을 초기 바인딩으로 사용하고 있습니까? MSXML 4를 사용하는 경우 하위 버전에만 해당됩니다 (일부 인터페이스는 서비스 팩에서 이진 호환이 가능하지 않음).

+0

우리는 msxml2에 초기 바인딩하지만 참조하는 버전을 컴파일했습니다. 4로 가려고합니다. – Dabblernl

+0

MSXML2는 인터페이스 사양만큼 버전이 아닙니다. "참조"대화 상자에서 MSXML은 "Microsoft XML, v3.0"으로 나타납니다. v4.0을 사용하는 경우 응용 프로그램 매니페스트가 SxS가 설치된 SP 수준 중 하나를 선택하지 않으면 최신 버전이 설치됩니다 (예 : 여러 v4 .0 컴퓨터에). – Bob77

+0

msxml6을 참조하고 MSXML2.DOMDocument60에 대한 모든 MSXML2.DOMDocument 참조의 이름을 바꿔서 트릭을 만들었습니다. 감사! – Dabblernl

1

항상 버전 독립적 인 ProgID 대신 버전 종속 ProgID를 사용하는 것이 좋습니다. 예를 들어, 대신 Msxml2.DOMDocument.6.0을 사용하는 것이 좋습니다. 자세한 내용은 Using the right version of MSXML in Internet Explorer을 참조하십시오.

+0

하지만이 경우에는 후기 바인딩을 사용하지 않으므로 ProgID 값은 적합하지 않습니다. 특정 버전에 종속적 인 인터페이스를 사용하기로 결정했음을 알았습니다.이 인터페이스는 작동하지만 일반적으로 버전 별 기능을 사용하지 않는 한 일반적으로 필요하지는 않습니다. – Bob77