Maison > développement back-end > C++ > Comment enregistrer correctement une DLL CPP dans COM à l'aide de Wix MSI Installer ?

Comment enregistrer correctement une DLL CPP dans COM à l'aide de Wix MSI Installer ?

Susan Sarandon
Libérer: 2024-11-19 03:00:03
original
546 Les gens l'ont consulté

How to Properly Register a CPP DLL into COM Using Wix MSI Installer?

Enregistrement d'une dll CPP dans COM après l'installation à l'aide du programme d'installation de Wix Msi

Réponse courte et récapitulative

Vous devez arrêter en utilisant des fichiers batch et des actions personnalisées pour l'enregistrement COM (peu fiable) et extrayez plutôt les informations d'enregistrement COM à l'aide de l'outil heat.exe de la boîte à outils WiX pour ajouter le COM enregistrement dans votre base de données MSI au moment de la compilation.

Il existe quelques complications pour les binaires 64 bits, voir les détails ci-dessous. Heureusement, il semble que vous ayez affaire à un composant 32 bits basé sur votre répertoire d'installation indiqué ci-dessus.

Dans ce cas particulier, il a été utile d'exécuter heat.exe sur le fichier COM après le déploiement lorsque toutes les dépendances étaient "dans place" pour que le fichier COM se charge correctement. Il y a beaucoup de "communication de débogage" dans ces réponses - je laisserai tout cela en place pour l'avenir, mais essayez d'abord cette solution simple. Et essayez peut-être le nouvel outil de dépendance "Dependencies.exe" décrit ci-dessous.

Réponse longue et détaillée

Avant d'essayer de répondre à la question (qui semble tourner autour dépendances manquantes ou quelque chose de bizarre se fait dans votre fichier de commandes), je souhaite clarifier quelques points pour vous en ce qui concerne les meilleures pratiques pour COM. enregistrement.

L'auto-enregistrement considéré comme nuisible

L'auto-enregistrement ne doit pas être utilisé pour enregistrer des fichiers COM. Voici une description de la raison pour laquelle c'est le cas : [MSI register dll - Self-Registration considéré comme dangereux](https://stackoverflow.com/questions/2736641/com-registration-where-did-the-idea-of-no -auto-inscription-venant-de/2737548#2737548). Il y a une bonne nouvelle, cependant, faire les choses comme prévu via les mécanismes MSI intégrés sera à la fois plus facile et plus fiable une fois que vous l'aurez configuré correctement.

Plutôt que d'utiliser des actions personnalisées ou la table SelfReg, les informations d'enregistrement COM doit être extrait de vos fichiers COM au moment de la compilation, c'est-à-dire lorsque vous compilez votre fichier MSI à partir de vos fichiers sources WiX. Les données de registre extraites doivent être utilisées pour remplir la famille de tables de données MSI conçues pour enregistrer et désenregistrer de manière fiable le fichier COM lors de l'installation et de la désinstallation respectivement.

WiX : l'outil de ligne de commande "heat.exe"

Il n'est pas nécessaire de comprendre les détails complexes de ce processus - tout ce que vous devez savoir, c'est quels outils utiliser. WiX fournit à cet effet l'outil "heat.exe". Il s'agit essentiellement d'un outil de « moissonneuse » capable de générer des fichiers sources XML WiX valides à plusieurs fins, dont l'extraction COM. Il prend également en charge la traversée des répertoires en général - générant des fichiers sources WiX qui peuvent installer les fichiers rencontrés lors de la traversée. Il s'agit essentiellement d'un moyen très rapide de créer un package MSI une fois que vous savez comment l'utiliser.

Dependency Walker

Nous avons donc établi que vous devez prendre le temps d'apprendre à utiliser heat.exe pour générer la source WiX nécessaire au bon enregistrement du fichier COM. cependant, il y a un autre problème : les dépendances manquantes.

Pour qu'un fichier COM puisse s'auto-enregistrer - ou pour que vous puissiez extraire avec succès les données du registre COM à l'aide de heat.exe - le COM le fichier doit pouvoir se charger correctement. Pour que cela soit possible, toutes les dépendances de DLL doivent être disponibles sur le système en question dans un emplacement accessible.

Procurez-vous une copie de Dependency Walker et utilisez-la pour analyser votre fichier COM pour savoir de quels fichiers il dépend. Voici un exemple d'un fichier COM qui ne parvient pas à se charger car il ne trouve pas MMUtilities.dll :

[Image de la sortie de Dependency Walker montrant une dépendance manquante]

Vous trouverez probablement quelque chose de similaire qui ne va pas avec votre DLL (ou quel que soit le type de fichier, par exemple OCX) lorsqu'elle est exécutée à partir de l'emplacement d'installation de votre configuration. Les fichiers de dépendances requis ne peuvent pas être trouvés par regsvr32.exe et le processus d'enregistrement échoue.

Certaines dépendances manquantes ont été signalées qui ne sont pas importantes - Je suppose que cela a à voir avec l'âge de l'outil Dependency Walker - il n'a pas été mis à jour récemment à ma connaissance. Recherchez un fichier que vous reconnaissez comme votre propre fichier de dépendances ou comme un fichier système principal, par opposition aux noms de DLL très longs de fichiers dont vous n'avez jamais entendu parler. Gardez à l’esprit que certaines DLL ont des DLL de langage de dépendance nécessaires au chargement. Par exemple, MMUtilities.dll a besoin de MmUtilitiesEnglish.dll ou d'une dll d'une autre langue présente dans le même dossier pour pouvoir se charger correctement.

Quelques exemples de dépendances faussement positives pour le fichier ci-dessus : 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, etc... Il y en avait beaucoup. Je crois, mais je ne suis pas sûr, que la cause première de ces faux positifs est liée à des problèmes liés aux composants côte à côte installés sur le

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal