Kurze, zusammenfassende Antwort
Sie müssen aufhören Verwenden von Batchdateien und benutzerdefinierten Aktionen für die COM-Registrierung (unzuverlässig) und stattdessen Extrahieren der COM-Registrierungsinformationen mit dem Tool heat.exe aus dem WiX-Toolkit, um die COM-Registrierung zur Kompilierungszeit zu Ihrer MSI-Datenbank hinzuzufügen.
Es gibt sie Einige Komplikationen bei 64-Bit-Binärdateien, siehe Details unten. Glücklicherweise sieht es so aus, als hätten Sie es mit einer 32-Bit-Komponente zu tun, die auf Ihrem oben gezeigten Installationsverzeichnis basiert.
In diesem speziellen Fall hat es geholfen, heat.exe nach der Bereitstellung auf der COM-Datei auszuführen, als alle Abhängigkeiten „in“ waren „Ort“ eingeben, damit die COM-Datei ordnungsgemäß geladen werden kann. Diese Antworten enthalten viel „Debugging-Kommunikation“ – ich belasse alles für die Zukunft, aber probieren Sie zuerst diese einfache Lösung aus. Und probieren Sie vielleicht das unten beschriebene neue Abhängigkeitstool „Dependencies.exe“ aus.
Lange, ausführliche Antwort
Bevor ich versuche, die Frage zu beantworten (die sich anscheinend um Folgendes dreht: fehlende Abhängigkeiten oder etwas Seltsames in Ihrer Batchdatei passiert), möchte ich für Sie ein paar Dinge in Bezug auf bewährte Verfahren für die COM-Registrierung klären.
Selbstregistrierung gilt als schädlich
Selbstregistrierung sollte nicht zum Registrieren von COM-Dateien verwendet werden. Hier ist eine Beschreibung, warum dies der Fall ist: [MSI-Registrierungs-DLL – Selbstregistrierung als schädlich erachtet](https://stackoverflow.com/questions/2736641/com-registration-where-did-the-idea-of-no -selbstregistrierung-kommen-von/2737548#2737548). Es gibt jedoch eine gute Nachricht: Wenn Sie es ordnungsgemäß eingerichtet haben, wird es einfacher und zuverlässiger sein, die Dinge über integrierte MSI-Mechanismen wie vorgesehen zu erledigen.
Anstatt benutzerdefinierte Aktionen oder die SelfReg-Tabelle zu verwenden, werden COM-Registrierungsinformationen verwendet sollte zum Zeitpunkt der Kompilierung aus Ihren COM-Dateien extrahiert werden – mit anderen Worten, wenn Sie Ihre MSI-Datei aus Ihren WiX-Quelldateien kompilieren. Die extrahierten Registrierungsdaten sollten verwendet werden, um die Familie der MSI-Datentabellen zu füllen, die dazu dienen, die COM-Datei während der Installation bzw. Deinstallation zuverlässig zu registrieren bzw. die Registrierung aufzuheben.
WiX: Das Befehlszeilentool „heat.exe“.
Es ist nicht notwendig, die komplizierten Details dieses Prozesses zu verstehen – Sie müssen lediglich wissen, welche Tools Sie verwenden müssen. WiX stellt hierfür das Tool „heat.exe“ zur Verfügung. Es handelt sich im Wesentlichen um ein „Harvester“-Tool, das in der Lage ist, gültige WiX-XML-Quelldateien für verschiedene Zwecke zu generieren – einer davon ist die COM-Extraktion. Es unterstützt auch das Durchlaufen von Verzeichnissen im Allgemeinen – das Generieren von WiX-Quelldateien, die die beim Durchlaufen gefundenen Dateien installieren können. Es ist im Wesentlichen eine sehr schnelle Möglichkeit, ein MSI-Paket zu erstellen, sobald Sie wissen, wie man es verwendet.
Dependency Walker
Daher haben wir festgestellt, dass Sie sich die Zeit nehmen sollten, zu lernen, wie Sie heat.exe verwenden, um die WiX-Quelle zu generieren, die für die ordnungsgemäße Registrierung der COM-Datei erforderlich ist. Allerdings gibt es noch ein weiteres Problem: die fehlenden Abhängigkeiten.
Damit sich eine COM-Datei selbst registrieren kann – oder damit Sie die COM-Registrierungsdaten mit heat.exe erfolgreich extrahieren können – die COM Die Datei muss korrekt geladen werden können. Damit dies möglich ist, müssen alle DLL-Abhängigkeiten auf dem betreffenden System an einem zugänglichen Ort verfügbar sein.
Besorgen Sie sich eine Kopie von Dependency Walker und scannen Sie damit Ihre COM-Datei nach den Dateien, von denen sie abhängt. Hier ist ein Beispiel für eine COM-Datei, die nicht geladen werden kann, weil sie MMUtilities.dll nicht finden kann:
[Bild der Dependency Walker-Ausgabe mit fehlender Abhängigkeit]
Sie werden höchstwahrscheinlich einen ähnlichen Fehler finden mit Ihrer DLL (oder einem anderen Dateityp, zum Beispiel OCX), wenn es vom Installationsort Ihres Setups ausgeführt wird. Die erforderlichen Abhängigkeitsdateien können von regsvr32.exe nicht gefunden werden und der Registrierungsprozess schlägt fehl.
Es wurden einige fehlende Abhängigkeiten gemeldet, die nicht wichtig sind – ich denke, das hat mit dem Alter zu tun des Dependency Walker-Tools – es wurde meines Wissens in letzter Zeit nicht aktualisiert. Suchen Sie nach einer Datei, die Sie entweder als Ihre eigene Abhängigkeitsdatei oder als Kernsystemdatei erkennen, im Gegensatz zu sehr langen DLL-Namen von Dateien, von denen Sie noch nie gehört haben. Beachten Sie, dass einige DLLs über abhängige Sprach-DLLs verfügen, die zum Laden erforderlich sind. Zum Beispiel benötigt MMUtilities.dll MmUtilitiesEnglish.dll oder eine andere Sprach-DLL im selben Ordner, um korrekt geladen zu werden.
Einige Beispiele für falsch positive Abhängigkeiten für die obige Datei: API-MS -WIN-CORE-RTLSUPPORT-L1-1-0.DLL, API-MS-WIN-CORE-PROCESSTHREADS-L1-1-0.DLL, API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL usw. Es gab viele. Ich glaube, bin mir aber nicht sicher, dass die Ursache dieser Fehlalarme in Problemen mit nebeneinander installierten Komponenten liegt
Das obige ist der detaillierte Inhalt vonWie registriere ich eine CPP-DLL ordnungsgemäß in COM mit dem Wix MSI Installer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!