Przechwycenie odwołania do COM poprzez CLSID

0

Cześć,
szef kazał mi zrobić, aby pewna aplikacja nie wymagała instalowania bibliotek COMowych na komputerach klienckich. Nasza aplikacja używa biblioteki (zewnętrznej), która to ładuje pewne typy poprzez CLSID. Jeżeli odpalam taki program na innym kompie mam błąd, że typ o CLSID ... nie został odnaleziony (w funkcji CreateInstance). Istnieje jakaś możliwość przechwycenia tego i wskazania mu dll w której ma szukać tego typu? Mam tą dllkę która jest zarejestrowana w rejestrze ale na komputerze klienckim nie mogę dodawać wpisów do rejestru...

0

http://stackoverflow.com/questions/8752121/marshaling-unmanaged-dll-in-c-sharp-through-cominterop-without-registering-dll
Ale jeśli nie masz wpływu na tę zewnętrzną bibliotekę, to chyba ci to niewiele pomoże.

0

Nie mam dostępu do kodu tych bibliotek.
W międzyczasie znalazłem inofrmację o tym Regiteration-Free. Opiera się on na manifestach jednak mi to nie działa... nie wiem co robię źle. Mam exe o nazwie DllsMergeTest.exe oraz manifest DllsMergeTest.exe.manifest
Do tego biblioteka OTAClient.dll i plik OTAClient.X.manifest

DllsMergeTest.exe.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0">
<assemblyIdentity
            type = "win32"
            name = "DllsMergeTest"
            version = "1.0.0.0" />
<dependency>
            <dependentAssembly>
                        <assemblyIdentity
                                    type="win32"
                                    name="OTAClient.X"
                                    version="1.0.0.0" />
            </dependentAssembly>
</dependency>
</assembly>

OTAClient.X.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0">

<assemblyIdentity
   type="win32"
   name="OTAClient.X"
   version="10.0.0.2498" />

<file name = "OTAClient.dll">

<comClass
    clsid="{C5CBD7B2-490C-45F5-8C40-B8C3D108E6D7}"
    threadingModel = "Apartment" />

<typelib tlbid="{F645BD06-E1B4-4E6A-82FB-E97D027FD456}"
       version="1.0" helpdir=""/>

</file>

<comInterfaceExternalProxyStub 
    name="ITDConnection4" 
    iid="{21EABA3E-8FF5-46A1-B4C2-14998C9DA677}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{F645BD06-E1B4-4E6A-82FB-E97D027FD456}" />



</assembly>

Ale wciąż mam ten sam komunikat że class factory for component with CLSID: {C5CBD7B2-490C-45f5-8C40-B8C3D108E6D7}" failed due to fallowing error: 80040154 class not registered.

BTW. Moja aplikacja to aplikacja konsolowa

1 użytkowników online, w tym zalogowanych: 0, gości: 1