Condividi tramite


Registrazione automatica

Man mano che il software dei componenti continua a crescere come mercato, ci saranno sempre più istanze in cui un utente ottiene un nuovo componente software come una singola DLL o un modulo EXE, ad esempio quando si scarica un nuovo componente da un servizio on-line o si riceve uno da un amico su un disco floppy. In questi casi, non è pratico richiedere all'utente di eseguire una lunga procedura di installazione o programma di installazione. Oltre ai problemi di licenza, gestiti tramite IClassFactory2, una procedura di installazione crea in genere le voci del Registro di sistema necessarie per l'esecuzione corretta di un componente nel contesto COM e OLE.

La registrazione automatica è il metodo standard tramite il quale un modulo server può creare un pacchetto delle proprie operazioni del Registro di sistema, sia di registrazione che di annullamento della registrazione, nel modulo stesso. Se usato con licenze gestite tramite IClassFactory2, un server può diventare un modulo completamente autonomo senza bisogno di programmi di installazione esterni o di file .reg.

Qualsiasi modulo di autoregistrazione, DLL o EXE, deve includere prima una stringa "OleSelfRegister" nella sezione StringFileInfo della relativa risorsa di informazioni sulla versione, come illustrato di seguito.

VS_VERSION_INFO VERSIONINFO 
 
 ... 
 
 BEGIN 
   BLOCK "StringFileInfo" 
    BEGIN 
#ifdef UNICODE 
     BLOCK "040904B0" // Lang=US English, CharSet=Unicode 
#else 
     BLOCK "040904E4" // Lang=US English, CharSet=Windows Multilingual 
#endif 
      BEGIN 
       ... 
       VALUE "OLESelfRegister", "\0" 
      END 
 
   ... 
 
   END 
 
 ... 
 
 END 
 

L'esistenza di questi dati consente a qualsiasi parte interessata, ad esempio un'applicazione che desidera integrare questo nuovo componente, di determinare se il server supporta la registrazione automatica senza dover prima caricare la DLL o EXE.

Se il server è incluso in un modulo DLL, la DLL deve esportare le funzioni DllRegisterServer e DllUnregisterServer. Qualsiasi applicazione che desidera indicare al server di registrarsi (ovvero tutti i relativi ID CLSID e libreria dei tipi) può ottenere un puntatore a DllRegisterServer tramite la funzione GetProcAddress. All'interno di DllRegisterServer, la DLL crea tutte le voci del Registro di sistema necessarie, archiviando il percorso corretto della DLL per tutte le voci InprocServer32 o InprocHandler32 .

Quando un'applicazione desidera rimuovere il componente dal sistema, deve annullare la registrazione del componente chiamando DllUnregisterServer. All'interno di questa chiamata, il server rimuove esattamente le voci create in precedenza in DllRegisterServer. Il server non deve rimuovere in modo cieco tutte le voci per le relative classi perché altri software potrebbero aver archiviato voci aggiuntive, ad esempio una chiave TreatAs .

Se il server è incluso in un modulo EXE, l'applicazione che desidera registrare il server avvia il server EXE con l'argomento della riga di comando /RegServer o -RegServer (senza distinzione tra maiuscole e minuscole). Se l'applicazione vuole annullare la registrazione del server, avvia il file EXE con l'argomento della riga di comando /UnregServer o -UnregServer. Il file EXE con registrazione automatica rileva questi argomenti della riga di comando e richiama le stesse operazioni di una DLL all'interno rispettivamente di DllRegisterServere DllUnregisterServer, registrando il percorso del modulo in LocalServer32 anziché InprocServer32 o InprocHandler32.

Il server deve registrare il percorso completo del percorso di installazione del modulo DLL o EXE per le rispettive chiavi InprocServer32, InprocHandler32 e LocalServer32 nel Registro di sistema. Il percorso del modulo viene facilmente ottenuto tramite la funzione GetModuleFileName.

Installazione come applicazione di servizio

Registrazione di una classe all'installazione

Registrazione di un server EXE in esecuzione

Registrazione di oggetti in ROT