Question

J'essayais de déterminer la meilleure solution pour enregistrer un serveur COM à l'aide de WiX afin de créer un package Windows Installer et je me bats.

Dans cet article, Archive d'ingénierie de déploiement: HOWTO: Utilisez Regsvr32.exe avec WIX . Une requête ouverte a été lancée pour le & Quot; Setup police & Quot; pour réprimer l'utilisation de regsvr32 via une action exe personnalisée. Je connais les inconvénients d’utiliser regsvr32 lorsqu’il s’enregistre sur le système plutôt que sur l’utilisateur, mais je me souviens également que OleSelfRegister peut avoir des problèmes avec un bulletin de support technique de Microsoft (désolé, le lien ne trouve pas) - et je crois ils ont recommandé d'utiliser <=>.

Un conseil?

Était-ce utile?

La solution

Lire & "N'utilisez pas les tables SelfReg et TypeLib &"; à:

https://msdn.microsoft.com/en-us/library / bb204770 # no_selfreg

Pour WiX, examinez l'élément Composant dans la référence du schéma à l'adresse

.

http://wixtoolset.org/documentation/manual/v3 /xsd/wix/component.html

Notez certains éléments enfants tels que AppId , Classe , ProgId , Registre , etc. La technique appropriée consiste à utiliser COM extraction pour refléter les informations d’enregistrement et les émettre de manière déclarative dans votre programme d’installation afin que MSI puisse les prendre en charge sans pour autant sortir du processus d’un code (comme DllRegisterServer()) qui pourrait échouer et ne pas échouer. fournit des informations MSI sur l'empreinte du composant du point de vue de la réparation et de la publication.

Autres conseils

Il existe un outil & "Tallow &"; inclus avec Wix. Vous pouvez l'utiliser pour générer automatiquement les entrées de registre correctes. Ensuite, il vous suffit de configurer votre installation Wix pour écrire ces entrées. Selfreg ne doit pas être utilisé.

Comme @Trampster l'a signalé, heat.exe ne collecte pas correctement les entrées de registre des serveurs COM. J'ai essayé mais les résultats étaient incomplets.

Au lieu de cela, suivez les conseils de surveillez les accès au registre (InstallSite Tools: Surveillance) , j’ai utilisé InstallShield RegSpyUI. Cela est censé être livré avec les versions de Installshield v7 et ultérieures, y compris la version d'évaluation. Cette information peut être obsolète; Je peux confirmer qu'il n'est pas fourni avec le très inutile Installshield LE fourni avec VS2013.

Heureusement, j’avais une copie d’InstallShield 2010 fournie avec RegSpyUI.

Quoi qu’il en soit, RegSpyUI était simple à utiliser: pointez-le sur le fichier COM .exe, extrayez les informations de registre dans un fichier .reg. Ensuite, utilisez la chaleur pour récolter cela dans un fichier .wxs que vous pouvez ajouter à votre projet Wix

heat reg <some.reg> -gg -o <some.wxs>

Ensuite, il suffit de modifier les chemins d'accès codés en dur qui pointent vers l'emplacement du fichier .exe pour qu'ils reflètent le dossier d'installation prévu.

par exemple. si le fichier .wxs créé par RegSpyUI + heat a quelque chose comme ceci

<Fragment>
    <DirectoryRef Id="TARGETDIR">
        <Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
            <RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
                <RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
            </RegistryKey>
        </Component>
    </DirectoryRef>
</Fragment>

et vous installez dans votre fichier Wix principal vers

<Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder" Name="PFiles">
            <Directory Id="COMPANY" Name="My Company">
                <!--This is the actual installation folder-->
                <Directory Name="MyProduct" Id="MYPRODUCT">

puis modifiez simplement le chemin RegistryValue @ value en ... " [MYPRODUCT]\COMFOO.exe "

Un seul inconvénient: l’enregistrement WiX Com avec heat.exe ne fonctionne pas pour les serveurs COM .exe. InstallShield et ses outils semblent le prendre en charge, mais RegSpyUI n’est qu’un outil d’interface utilisateur, et non un outil que je peux exécuter sur ma machine de compilation.

Essayez ceci:

  1. Créer un nouveau projet .NET
  2. Ajouter une référence de projet au candidat COM dll ou OOP dont vous souhaitez collecter les wxs
  3. Rechercher le fichier Interop.candidate.dll (dans le obj\debug dossier)
  4. Exécutez l'outil WiX Heat sur la DLL interop que vous venez de trouver.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top