Question

Après avoir suivi les conseils donnés dans cette question , j'ai ajouté quelques lignes supplémentaires. de code pour une autre action personnalisée. Celui-ci est destiné à appeler regsvr32 sur la copie de capicom que j'ai essayé de mettre dans le dossier système de l'utilisateur. Cependant, je reçois l'erreur 2721, qui semble être une action personnalisée, une erreur non trouvée, d'après ce que j'ai vu. Aucune suggestion? J'essaie de maintenir la cohérence avec les itérations précédentes de mon programme d'installation en appelant regsvr, plutôt que d'ajouter simplement les entrées de registre lors de l'installation, ce qui pourrait être une bonne idée à la place. ::: haussement d'épaules :::

<Directory Id="SystemFolder" Name="Sys">
  ...
  <component ...>
     ...
    <File Id="CapiCom.Dll" LongName="CapiCom.Dll" Name="CAPICOM.DLL" Source=... />
  </component>
</directory>
...
<CustomAction Id="REGCAPICOM" ExeCommand='regsvr32.exe "[SystemFolder]capicom.dll"' Return = "ignore" Execute="deferred" />
...
<InstallExecuteSequence>
  ...
  <Custom Action="REGCAPICOM" After="InstallFiles" />
</InstallExecuteSequence>

Modifier: Oui, utiliser regsvr32 en tant qu’installateur est une mauvaise chose. Mais lorsque j'ai téléchargé le SDK Capicom, c'est ce que MS a dit de faire pour l'installer. En cherchant, beaucoup de gens ont dit que c’était une façon stupide de le faire ... mais c’est aussi un mécanisme fourni par la SP. Je vais écouter les suggestions pour un meilleur moyen. Je ne considère pas que ce soit un problème si Capicom est laissé pour compte lors de la désinstallation de mon application, car il s'agit d'un composant Windows standard.

Edit: Hmmm. Apparemment, l’une des choses que selfreg exécute sur la dll est de créer une graine aléatoire à ajouter au registre. Je ne sais pas quel mécanisme il utilise pour générer cette graine, mais je soupçonne qu’il serait considéré de mauvais goût d’en générer une moi-même, surtout si je donnais la même graine à tous les utilisateurs. Pas sûr… Apparemment, si je saute ce Capicom, il le fait tout seul, alors ça va.

Autres conseils

Euh, essayez-vous vraiment d'installer vous-même un fichier système Windows? Ce n'est pas permis sur beaucoup de niveaux. En outre, regsvr32.exe est SelfReg et SelfReg est bien connu pour être diabolique dans les installations. En fait, utiliser Windows Installer pour écrire l’enregistrement est de loin supérieur.

Cependant, toute la conception ici est très suspecte.

Vous pouvez utiliser heat sur le fichier pour créer un fichier WXS en sortie, qui placera les informations capicom.dll dans le registre sans utiliser regsvr32, lorsque le fichier msi sera exécuté

Quelque chose comme ça:

heat file [Path\Capicom.dll] -template:product -out capicom.wxs

Ajoutez ensuite le fichier capicom.wxs à votre programme d'installation. Dans ce fichier, créez un élément ComponentGroup contenant les éléments Component (s):

<ComponentGroup Id="capicom">
  <ComponentRef Id="capicom.dll"/>
</ComponentGroup>

Ensuite, dans le fichier WXS principal, ajoutez l'élément Fragment qui liera le composant capicom

  

La dernière étape consiste à ajouter ComponentGroupRef à la fonctionnalité à laquelle il appartient:

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
scroll top