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...
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.
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