TL; DR Tutte le voci di registro prodotte da regsvr32
devono essere presenti in un manifest SxS reg-free-COM e viceversa?Quali tag sono richiesti nel manifest per la registrazione senza COM?
Sto cercando di ottenere la registrazione COM libera per un componente di terze parti.
Readingupon il soggetto, trovo che ci sono diversi elementi menzionati, che possono essere messi in un manifesto:
From the docs, possiamo aggiungere le seguenti tag a un manifesto per descrivere un componente COM:
assemblyIdentity
- che in realtà solo descrive il "astratto assembly" per quanto mi riguarda posso direcomClass
- descrive la classe COM (IID In terface). Sembrerebbe, questo è sempre necessario.typelib
- quando?comInterfaceExternalProxyStub
- quando?comInterfaceProxyStub
- quando?
From the other docs for HKEY_LOCAL_MACHINE\SOFTWARE\Classes
possiamo osservare che ci sono alcune categorie per le voci di registro COM:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}
presumo grosso modo corrisponde allacomClass
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{IID}
corrisponderebbe a siacomInterface[External]ProxyStub
, ma Ho seriamente no indizio quando usare quale (o entrambi)- Quale voce di registro corrisponde alla voce manifest di
typelib
??
Utilizzando regsvr42 per estrarre la roba la dll che sto cercando di regfree cede un manifesto che contiene solo comClass
voci, nessuna libreria dei tipi o le voci ProxyStub. (E ho incrociato le chiavi scritte, la DLL in questione, pdm.dll
, MS Process Debug Manager scrive solo quelle chiavi, cioè non c'è nessuna libreria di tipi o informazioni di stub proxy apparenti nel registro.)
Se il registro contiene solo le informazioni relative a comClass
ciò significa che queste informazioni saranno sufficienti nel manifest SxS o potrebbero essere necessarie ulteriori informazioni nel manifest?
Per inciso ho notato che il registro contiene un VersionIndependentProgId
e ProgId
che ha un numero di versione aggiunto alla fine. Il manifesto ha solo una voce di ProgId
, e lo Stato docs:
progid: identificatore programmatico Versione-dipendente associato al componente COM . Il formato di un ProgID è
<vendor>.<component>.<version>
.
Ma i documenti affermare anche
Il ComClass elemento può avere
<progid>...</progid>
elementi come bambini, che elencano la versione ProgID dipendenti.
e they say che l'attributo progid dovrebbe essere quello indipendente dalla versione.
Quindi, cosa mettere qui? E importa anche quando il client non richiede una versione specifica?
PDM non avrà una libreria di tipi, non ha interfacce IDispatch ed è necessario utilizzare CoCreateInstance(). E si comporta come un componente in-process a thread libero quindi non ha bisogno di un proxy/stub. Cosa va veramente storto qui? –
@ Ciao, grazie. Niente va storto in quanto tale, ma non ero sicuro se ci fossero potenziali insidie. (COM mi fa sempre sentire come se mi mancasse qualcosa.) Se tu potessi aiutare a svelare le mie divagazioni di cui sopra in due o tre domande davvero utili, lo apprezzerei. Altrimenti sono contento che tu sembri pensare che tutto sia ordinato :-) –