Próbuję skonfigurować rejestrację wolną COM, ale mam niewielki problem w tym, że inny obiekt COM może być klientem.Rejestracja Free Com i manifestów dll
App.exe -----> COM Server/Client DLL (zarejestrowany czy nie) --------> COM Server DLL (nie zarejestrowany)
Moje pytania jest to możliwe utworzyć manifest dla drugiej biblioteki dll (COM Server/Client dll)? Nie mam kontroli nad plikiem wykonywalnym, ale jeśli tak, to działa, jeśli utworzę manifest klienta dla pliku wykonywalnego i manifest serwera dla biblioteki dll COM.
to plik manifestu dla średniej dll. Próbowałem go osadzić i wypróbowałem na zewnątrz. Nadal nie działa.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32"
name="COMCliSer.dll"
version="1.0.0.0"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
name="COMSer.dll"
version="1.0.0.0"
/>
</dependentAssembly>
</dependency>
</assembly>
Na dalszych badań, mogę to wszystko działa tak długo, jak dll środku jest również rejestracja za darmo i exe ma manifestu aplikacji. Jak tylko zarejestruję środkową bibliotekę DLL i zrzucę manifest aplikacji (nie mam kontroli nad tym, co exe będzie używać mojej biblioteki DLL), cała sprawa przestanie działać.
Jeśli plik exe nie ma manifestu, manifest dll nie jest brany pod uwagę. Mogę to udowodnić, ustawiając wszystko do pracy. Następnie popełniam błąd w manifeście montażowym. Wyskakuje zwykła wiadomość:
Nie można utworzyć procesu: Uruchomienie tej aplikacji nie powiodło się, ponieważ konfiguracja aplikacji jest niepoprawna. Ponowne zainstalowanie aplikacji może rozwiązać ten problem.
Gdybym wtedy upuść manifestu aplikacji, ładowania aplikacji (aczkolwiek w CoCreateInstance nie powiedzie, ponieważ zależności nie są brane pod uwagę)
Dlaczego dzwonisz zespół 'comser.dll'? Czy informacje o manifeście złożenia są połączone? O wiele łatwiej jest wdrożyć zespół o opisowej nazwie np. "Microsoft.VC90.CRT", który zawiera biblioteki dll o różnych nazwach: "msvcr90.dll". Kiedy mamy do czynienia z bibliotekami dll, trudniej jest debugować, ponieważ jeden manifest służy teraz dwóm celom: opisaniu zawartości zestawu dla konsumentów, ORAZ opisaniu zależności biblioteki DLL w zespole. –
Imiona zostały zmienione, aby chronić niewinnych! To nie są prawdziwe nazwiska. Są to rodzime biblioteki dll COM, a nie zespoły .NET. – Steve
Co ponadto oznacza "nie działa"? Czy exe i 2nd dll załadują się i po prostu nie uda się utworzyć instancji trzeciej, czy exe lub 2nd dll nie załadują się całkowicie? Sprawienie, że rzeczy faktycznie nie załadują się, jest dobrym krokiem, ponieważ oznacza, że system widzi manifest i rejestruje błąd co najmniej w systemie lub aplikacji, w dzienniku zdarzeń. Jeśli po prostu nie zadziała na wezwanie do CoCreateInstance, prawdopodobnie nie będzie w ogóle widział manifestu. –