Müssen regsvr32
Sie die Datei zuerst in Ihren system32
Ordner verschieben , um eine DLL-Datei auf einem Windows-Server zu registrieren, oder erfolgt dies tatsächlich automatisch, sobald Sie den regsvr32
Befehl aufrufen ?
Kann ich eine DLL-Datei nach der Registrierung einfach löschen, wenn ich sie einfach auf meinem Desktop ablege und dort registriere? Was würde nach dem Entfernen passieren?
Mit anderen Worten, wie funktioniert der regsvr tatsächlich?
windows
deployment
dll
com
bvdb
quelle
quelle
c:\temp
und dort registriert. (Er erklärte mir später, dass er nicht die Windows-Berechtigungen hatte, um es aus seinem system32-Ordner zu registrieren). - Es hat sein Problem gelöst, aber ich hatte ein schlechtes Gefühl dabei. Leider hatte ich nicht genügend technisches Wissen, um dies zu beweisen. Dank der Antworten unten verstehe ich es jetzt endlich. Vielleicht sogar genug, um es zu korrigieren.Antworten:
Zusätzlich zu @Matthew Wetmores korrekter Antwort ist das Übliche, dass alle COM-Komponenten in dieser DLL registriert werden.
Insbesondere werden zwei Schlüssel (+ Unterschlüssel) in der Windows-Registrierung erstellt.
Betrachten Sie beispielsweise eine DLL:,
dao360.dll
die mehrere COM-Objekte enthält. Für jeden ist der erste Schlüssel so etwas wie:Für das DAO Table Defintion-Objekt ist der Name des Schlüssels die ProgID des COM-Objekts, auf das sich Programmierer in ihrem Code beziehen würden.
Unter dem Schlüssel befindet sich normalerweise ein einzelner Schlüssel mit einem Standardwert:
in diesem Fall:
{00000103-0000-0010-8000-00AA006D2EA4}
Dies ist die Klassen-ID oder CLSID für das COM-Objekt. Sie gibt an, wo sich der zweite Schlüssel befindet:
Dieser Schlüssel mit seinen Unterschlüsseln und Werten enthält zusätzliche Informationen zum COM-Objekt.
Ein zu beachtender Wert ist der Standardwert unter:
In unserem Beispiel hat es den Dateipfad der exe / dll, die das COM-Objekt hostet:
%CommonProgramFiles%\Microsoft Shared\DAO\dao360.dll
Dies ist der richtige Dateipfad, als regsvr32.exe zum Registrieren dieses COM-Objekts verwendet wurde. Wenn Sie die Datei manuell verschieben, funktioniert das COM-Objekt nicht mehr, da dieser Registrierungswert jetzt auf eine fehlende Datei verweist.
Bevor Sie regsvr32.exe für eine DLL verwenden, verschieben Sie sie an ihren endgültigen Speicherort und verschieben Sie die DLL nach der Registrierung nicht.
quelle
RegSvr32 ruft eine exportierte Methode DllRegisterServer in der DLL auf. Was als nächstes konkret passiert, hängt von der Implementierung ab. Oft werden Registrierungsschlüssel für COM basierend auf dem Speicherort der Datei geschrieben. Die Registrierung sollte im Allgemeinen nicht als Installationsprogramm betrachtet werden, das weit darüber hinaus geht.
Sofern die App nicht spezifisch ist, kann sie von überall registriert werden, aber Sie sollten sie danach nicht mehr verschieben / entfernen. SysMon von SysInternal kann den Datei- und Registrierungszugriff überwachen, wenn Sie die Registrierung aufrufen, wenn Sie die Details wirklich sehen möchten - obwohl nichts den Code daran hindert, entweder nichts oder wirklich alles zu tun, was der Code tun kann, wie auf das Internet zuzugreifen, andere Dateien zu schreiben oder zu entfernen usw. . Registrieren Sie wie bei jeder ausführbaren Datei nur den Code, dem Sie vertrauen.
Es gibt auch DllInstall , mit
regsvr32 /i
dem aufgerufen werden kann und das gemäß der regsvr32-Dokumentation als Installationsprogramm gedacht ist :Es gibt auch DllUnregisterServer , aber aus praktischer Erfahrung sind Implementierungen davon normalerweise von geringerer Qualität als die Registrierung.
Eines der Ziele des Windows Installer (MSI) war es, die Installation von diesem Code zu entkoppeln.
quelle