2010-07-27 6 views
0

나는 C# .net으로 작성한 클래스 라이브러리를 가지고있다. 내 64 비트 Windows 컴퓨터에서 COM을 사용하여 CreateObject() 스크립트 (자바 스크립트, vbscript, 무엇이든)를 사용하여 인스턴스를 만들 수 있도록 COM에 등록하고 싶습니다. 그래서 설치 프로젝트를 만들었습니다. 설치 프로젝트의 대상 플랫폼을 x64로 설정했습니다. 클래스 라이브러리 프로젝트의 대상 플랫폼은 AnyCPU로 설정됩니다. 나는 수동으로 드라이버의 registrtion을 수행하는 설치 프로그램에 대한 사용자 지정 작업을 만들었으며 그것이 실행하고 확실하게 알고COM을 통해 내 수업에 액세스 할 수없는 이유는 무엇입니까?

RegistrationServices regsrv = new RegistrationServices(); 
if (!regsrv.RegisterAssembly(this.GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase)) 
{   
    throw new InstallException("Failed To Register driver for COM Interop"); 
} 

나는이 프로세스에 디버거를 연결할 수 있습니다 ...이처럼 보이는이 등록 성공적으로 발생합니다.

어떤 이유로 CreateObject()를 사용하여 클래스의 개체를 만들려고하면 "명명 된 개체를 만들 수 없습니다 ..."라는 오류 메시지가 나타납니다. 그러나 SysWOW64 폴더 (32 비트 폴더)의 cscript.exe를 사용하여 스크립트를 실행하면 개체가 성공적으로 만들어지고 나머지 스크립트는 제대로 실행됩니다. 따라서 클래스가 32 비트에 성공적으로 등록되었지만 64는 등록되지 않은 것으로 나타나거나 내 프로젝트에 32 비트 종속성이 있고 64 비트 Cscript 호스트 프로세스가 해당 종속성으로 인해이를 만들 수없는 것처럼 보입니다. 내 클래스 라이브러리는 내가 작성한 하나의 다른 프로젝트를 참조하지만 어떤 CPU도 빌드하도록 설정되어있다. 따라서 32 비트 및 64 비트 프로세스에 적합해야합니다.

이 32 비트 종속성을 추적하는 방법에 대한 제안 사항이있는 사람이 있습니까?

답변

1

RegisterAssembly()를 사용하면 은 매우입니다. 여기서 잘못 될 수있는 한 가지는 설치 프로그램이 32 비트 모드로 실행되고 있다는 것입니다. 어떤 RegisterAssembly() 잘못된 레지스트리 섹션에 COM 서버를 등록 할 수 있습니다.

이 작업을 수행 할 필요없이 설정 프로젝트의 파일에 대한 등록 등록 정보를 COM으로 설정하면됩니다.

+0

나는 RegesterAssembly()를 시도하기 전에 그렇게했다. 불운. – PICyourBrain

+0

SysInternals 'ProcMon 도구를 사용하여 설치 관리자가 실제로 수행하는 작업을 확인하십시오. –

+0

나는 이것을 시도했지만 내가 찾는 것을 찾기가 어렵다. 내가 무엇을 필터링해야하는지에 대한 조언? – PICyourBrain

관련 문제