Sto provando a impostare la registrazione senza COM, ma ho un piccolo problema in quanto un altro oggetto COM potrebbe essere il client.Registrazione gratuita Com e dll manifesta
App.exe -----> COM server/client dll (registrati e non) --------> server COM DLL (non registrato)
Le mie domande è, è possibile creare un manifest per la seconda dll (DLL server/client COM)? Non ho il controllo dell'eseguibile, ma se l'ho fatto, funziona se creo un manifest client per l'eseguibile e un manifest server per la DLL del server COM.
questo è il file manifest per la dll centrale. Ho provato ad incorporarlo e l'ho provato esterno. Ancora non funziona.
<?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>
Su ulteriori indagini, posso ottenere tutto questo per funzionare fino a quando la dll mezzo è anche registrazione gratuita e l'exe ha un manifesto dell'applicazione. Non appena registro la DLL centrale e rilasciamo il manifest dell'applicazione (non ho il controllo di quale exe userà la mia DLL), l'intera operazione smetterà di funzionare.
Se l'exe non ha manifest, il manifest di dll non viene preso in considerazione. Posso provarlo impostando tutto per funzionare. Quindi si commette un errore nel manifesto dell'assembly. Apparirà il solito messaggio:
Impossibile creare il processo: questa applicazione non è stata avviata poiché la configurazione dell'applicazione non è corretta. Reinstallare l'applicazone potrebbe risolvere questo problema.
Se poi cadere il manifesto dell'applicazione, l'applicazione viene caricata (anche se il CoCreateInstance fallisce perché le dipendenze non vengono presi in considerazione)
Perché stai chiamando il gruppo 'comser.dll'? Le informazioni sul manifesto di assemblaggio vengono unite? È molto più facile distribuire un assieme con un nome descrittivo, ad es. "Microsoft.VC90.CRT", che contiene dll con nomi diversi: "msvcr90.dll". Quando si ha a che fare con gli assembly dll diventa più difficile eseguire il debug in quanto un manifest singolo ora ha due scopi: descrivere i contenuti dell'assembly ai consumatori e AND descrivere le dipendenze della dll nell'assembly. –
I nomi sono stati modificati per proteggere gli innocenti! Quelli non sono i veri nomi. Queste sono DLL native e non assembly .NET. – Steve
Inoltre, come funziona "non funziona"? Exe e 2nd dll si caricano e non riescono semplicemente a istanziare il 3o o l'exe o la seconda DLL non si carica completamente? Fare in modo che le cose non vengano effettivamente caricate è un buon passo poiché significa che il sistema sta visualizzando il manifest e registra un errore nel sistema o nell'applicazione, almeno nel registro eventi. Se semplicemente fallisce nella chiamata a CoCreateInstance, probabilmente non riesce a vedere il manifest. –