Ich versuche, Registrierung frei COM einzurichten, aber ein kleines Problem, dass ich ein anderes COM-Objekt kann der Client sein.Registration Free Com und DLL-Manifeste
App.exe -----> COM Server/Client-DLL (registriert oder nicht) --------> COM Server DLL (nicht registriert)
Meine Fragen ist, ist es möglich, ein Manifest für die zweite DLL erstellen (COM-Server/Client-DLL)? Ich habe keine Kontrolle über die ausführbare Datei, aber wenn ich das getan habe, funktioniert das, wenn ich ein Client-Manifest für die ausführbare Datei und ein Server-Manifest für die COM-Server-DLL erstelle.
Dies ist die Manifestdatei für die mittlere DLL. Ich habe versucht, es einzubetten und versuchte es extern. Funktioniert immer noch nicht.
<?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>
Bei der weiteren Untersuchung, kann ich das alles so lange arbeiten, wie die mittlere dll auch kostenlos registrieren und die exe hat ein Anwendungsmanifest. Sobald ich die mittlere DLL registriere und das Anwendungsmanifest lösche (ich habe keine Kontrolle darüber, welche EXE meine DLL verwenden wird), hört die ganze Sache auf zu arbeiten.
Wenn die Exe kein Manifest enthält, wird das Manifest der DLL nicht berücksichtigt. Ich kann dies beweisen, indem ich alles für die Arbeit aufstelle. Dann einen Fehler in das Manifest der Versammlung eingeben. Dies zeigt die übliche Meldung:
Prozess konnte nicht erstellt werden: Diese Anwendung konnte nicht gestartet werden, weil die Anwendungskonfiguration nicht korrekt ist. Eine Neuinstallation der Anwendung könnte das Problem lösen.
Wenn ich dann die Anwendung manifestieren fallen, (nicht, wenn auch die CoCreateInstance, weil die Abhängigkeiten nicht berücksichtigt werden) die Anwendung lädt
Warum Sie die Assembly 'comser.dll' fordern? Werden die Informationen zum Zusammenstellungsmanifest zusammengeführt? Es ist viel einfacher, eine Assembly mit einem beschreibenden Namen, z. "Microsoft.VC90.CRT", die DLLs mit unterschiedlichen Namen enthält: "msvcr90.dll". Beim Umgang mit dll-Assemblies wird es schwieriger zu debuggen, da ein einzelnes Manifest nun zwei Zwecken dient: den Inhalt der Assembly den Konsumenten zu beschreiben UND die Abhängigkeiten der DLL in der Assembly zu beschreiben. –
Die Namen wurden geändert, um die Unschuldigen zu schützen! Das sind nicht die richtigen Namen. Dies sind native COM-DLLs und keine .NET-Assemblys. – Steve
Auch, was "funktioniert nicht" zählt als? Werden die exe und die 2. dll geladen und können die 3. Instanz nicht instanziiert werden, oder kann die exe oder 2. dll nicht vollständig geladen werden? Es ist ein guter Schritt, Dinge zu laden, die tatsächlich nicht geladen werden können, da dies bedeutet, dass das System das Manifest sieht und mindestens einen Fehler im System- oder Anwendungsereignisprotokoll protokolliert. Wenn es den Aufruf von CoCreateInstance einfach nicht schafft, kann es das Manifest wahrscheinlich überhaupt nicht sehen. –