Freigeben über


Self-Registration

Da Komponentensoftware weiterhin als Markt wächst, wird es immer mehr Instanzen geben, in denen ein Benutzer eine neue Softwarekomponente als einzelnes DLL- oder EXE-Modul erhält, z. B. beim Herunterladen einer neuen Komponente von einem On-Line-Dienst oder beim Empfang einer Komponente von einem Freund auf einem Diskettendatenträger. In diesen Fällen ist es nicht praktisch, dass der Benutzer ein langwieriges Installationsverfahren oder Setupprogramm durchläuft. Neben den Lizenzierungsproblemen, die über IClassFactory2behandelt werden, erstellt eine Installationsprozedur in der Regel die erforderlichen Registrierungseinträge, damit eine Komponente im COM- und OLE-Kontext ordnungsgemäß ausgeführt wird.

Selbstregistrierung ist der Standard, über den ein Servermodul seine eigenen Registrierungsvorgänge, sowohl Registrierung als auch Registrierung, in das Modul selbst packen kann. Bei Verwendung mit Der Lizenzierung, die über IClassFactory2verarbeitet wird, kann ein Server zu einem vollständig eigenständigen Modul werden, ohne dass externe Installationsprogramme oder .reg Dateien erforderlich sind.

Jedes Selbstregistrierungsmodul, dll oder EXE sollte zuerst eine "OleSelfRegister"-Zeichenfolge im Abschnitt StringFileInfo abschnitt seiner Versionsinformationsressource enthalten, wie hier gezeigt.

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 
 

Durch das Vorhandensein dieser Daten können interessierte Parteien, z. B. eine Anwendung, die diese neue Komponente integrieren möchte, bestimmen, ob der Server die Selbstregistrierung unterstützt, ohne zuerst die DLL oder EXE laden zu müssen.

Wenn der Server in einem DLL-Modul verpackt ist, muss die DLL die Funktionen DllRegisterServer und DllUnregisterServerexportieren. Jede Anwendung, die den Server anweist, sich selbst zu registrieren (d. h. alle CLSIDs und Typbibliotheks-IDs), kann einen Zeiger auf DllRegisterServer über die GetProcAddress--Funktion abrufen. Innerhalb DllRegisterServer-erstellt die DLL alle erforderlichen Registrierungseinträge und speichert den richtigen Pfad zur DLL für alle InprocServer32 oder InprocHandler32 Einträge.

Wenn eine Anwendung die Komponente aus dem System entfernen möchte, sollte sie die Registrierung dieser Komponente aufheben, indem sie DllUnregisterServeraufruft. Innerhalb dieses Aufrufs entfernt der Server genau die Einträge, die er zuvor in DllRegisterServererstellt hat. Der Server sollte nicht blind alle Einträge für seine Klassen entfernen, da andere Software möglicherweise zusätzliche Einträge gespeichert hat, z. B. einen TreatAs Schlüssel.

Wenn der Server in einem EXE-Modul verpackt ist, startet die Anwendung, die den Server registrieren möchte, den EXE-Server mit dem Befehlszeilenargument /RegServer oder -RegServer (Groß-/Kleinschreibung wird nicht beachtet). Wenn die Anwendung die Registrierung des Servers aufheben möchte, startet sie die EXE mit dem Befehlszeilenargument /UnregServer oder -UnregServer. Die selbst registrierende EXE erkennt diese Befehlszeilenargumente und ruft die gleichen Vorgänge wie eine DLL in DllRegisterServerund DllUnregisterServerbzw. den Modulpfad unter LocalServer32 anstelle von InprocServer32 oder InprocHandler32auf.

Der Server muss den vollständigen Pfad zum Installationsspeicherort der DLL oder des EXE-Moduls für die jeweiligen InprocServer32, InprocHandler32und LocalServer32 Schlüssel in der Registrierung registrieren. Der Modulpfad wird einfach über die GetModuleFileName--Funktion abgerufen.

Installation als Dienstanwendung

Registrieren einer Klasse bei der Installation

Registrieren eines ausgeführten EXE-Servers

Registrieren von Objekten im ROT-