기존 COM Exe Server와이를 호출하는 VBA 또는 .NET 코드가 있습니다. 시스템 관리자가 아닌 다른 사용자가 레지스트리를 사용하거나 설치할 수 있도록 레지스트리를 설치하거나 수정해야하는 경우가 필요합니다.Win7의 레지스트리가없는 COM Exe Server 사용
변경/COM Exe 서버 수정이 불가능 (비싸다) 가정 해 봅시다.
질문 1 : 내가 Registering a Running EXE Server에 undertand에 어떤에서 는, EXE 파일 서버 클래스 테이블의 CLSID를 등록를 CoRegisterClassObject를 호출 할 수 있습니다. 그렇다면 클라이언트가 CoGetClassObject를 사용할 수 있어야합니까?
질문 2 (유형/클래스에 대한 레지스트리 항목 O/짝수 승?) : 위에서 올바른 경우, 내 EXE 서버가 CComModule에는 사용 (예, 사용되지 않음) 내가 참를 CoRegisterClassObject를 호출하는 것을 볼 수 있습니다. 그 클래스 테이블을 확인하는 방법이 있나요 그렇게 볼 수 있습니까?
질문 3 :
이것은 내가 사용하고있는 코드 조각이다. clsid 및 iid는 해당 clsid 및 iid guids를 나타냅니다. 인터페이스가 등록되지 않음 (HRESULT의 예외 : 0x80040155)이 CreateInstance를 호출 할 때 실패합니다. 이것은 나에게 슬픈 일이 될 수 있습니다.
var factory = UnsafeNativeMethods.CoGetClassObject(
clsid,
RegistrationClassContext.LocalServer,
IntPtr.Zero,
typeof(UnsafeNativeMethods.IClassFactory).GUID)
as UnsafeNativeMethods.IClassFactory;
factory.CreateInstance(null, ref iid, out obj);
관리자 권한없이 클래스를 등록 하시겠습니까? 구성 요소가 등록되면 관리자가 아닌 사용자도 COM 기능을 호출하는 코드를 실행할 수 있어야합니다. –
수정. 내가 뭘 하려는지 레지스트리 - 무료 활성화 (DLL 서버와 함께 할 수있는)입니다. 사용자가 많고 변경 사항이 많이 발생한다고 가정 해 보겠습니다. 그러면 등록이 필요하지 않습니다. 이 부분을 조금 더 명확하게하기 위해 첫 번째 단락을 수정했습니다. – moogs