Question

Je veux créer un fichier DLL CustomAction C # qui dépend d'un tiers .NET DLL (dans ce cas précis, il est MySql.Data.dll). Je le fichier DLL d'action C # personnalisée travaillant avec le fragment Wix ci-dessous. Je suis juste essayer de comprendre comment ajouter en toute sécurité une dépendance à l'action personnalisée. Note:. Je ne ai pas besoin de ce fichier de fichier DLL tiers pour l'application installée pour exécuter

  <Binary Id="MyCustomAction.dll" SourceFile="MyCustomAction.CA.dll" />

  <CustomAction Id="FixupConfigForMysql" Return="check" />

  <InstallExecuteSequence>
     <Custom Action='FixupConfigForMysql' After='InstallFiles'>NOT Installed</Custom>
  </InstallExecuteSequence>

Dois-je installer le fichier DLL tiers (MySql.Data.dll) afin d'obtenir l'action personnalisée à exécuter?

Puis-je ajouter une autre balise binaire avec le fichier DLL tiers?

Était-ce utile?

La solution

DTF dans le jeu d'outils WiX a un mécanisme permettant d'inclure votre ensemble d'action personnalisée et toutes ses références en un seul binaire (dll auto-extractible, au fond). Je ne vous écris pas géré des actions personnalisées (C / C ++ crée des actions personnalisées avec moins de dépendances et augmente le taux de réussite), mais il est censé fonctionner juste au moment où la construction VS.

Autres conseils

Vous pouvez utiliser <Binary /> pour ajouter ce sont les fichiers nécessaires pour exécuter des actions personnalisées. Cela devrait aller pour tout dll 3ème partie dont vous avez besoin aussi. Les fichiers inclus en utilisant l'élément binaire ne sont utilisés que lors de l'installation et ne sera pas considérée comme faisant partie de l'application en cours d'installation.

Mise à jour: la connexion entre un CustomAction et un binaire est fait en référençant le binaire de l'action personnalisée en utilisant l'attribut BinaryKey.

Sauf si vous pouvez avoir plusieurs attributs de BinaryKey (je ne l'ai pas essayé et ne voit pas directement un soutien pour cela dans le action Table MSI personnalisée ) vous ne pouvez avoir une action personnalisée en fonction de un binaire. Ce binaire devra donc effectuer toutes les dépendances nécessaires en lui-même.

Cela dit, si vos dll sont tous ensembles .Net, une idée serait d'utiliser ILMerge pour les emballer dans un seul ensemble.

Définir la propriété 'Local Copy' sur le disque référence à True dans Visual Studio.

Après le commentaire de M. Mensching, je vais remplir un peu plus en détail.

En supposant que vous êtes au moins Wix 3.0, vous pouvez utiliser MakeSfxCA.exe pour emballer les dépendances dans une DLL unique. (Ce fut un complément de la DFT -. Fondation Outils de déploiement) Fondamentalement, commencez par faire projet SURE copie votre DLL dépendantes. Faire un fichier CustomAction.config. Test avec un simple fichier .bat comme:

REM MyMakeSfxCA.bat - Run under $(TargetDir); abs. paths reqd.
"%WIX%\SDK\MakeSfxCA" ^
    %cd%\Managed_custom_action_pkg.dll ^
    "%WIX%\SDK\x86\sfxca.dll" ^
    %cd%\Managed_custom_action.dll  ^
    %cd%\Dependent1.dll ^
    %cd%\Dependent2.dll ^
    %cd%\Microsoft.Web.Administration.dll ^
    %cd%\Microsoft.Deployment.WindowsInstaller.dll ^
    %cd%\CustomAction.config 

Une fois que cela fonctionne, convertir en un événement après génération:

"$(WIX)\SDK\MakeSfxCA" ^
    $(TargetDir)\Managed_custom_action_pkg.dll ^
    "$(WIX)\SDK\x86\sfxca.dll" ^
    $(TargetDir)\Managed_custom_action.dll  ^
    $(TargetDir)\Dependent1.dll ^
    $(TargetDir)\Dependent2.dll ^
    $(TargetDir)\Microsoft.Web.Administration.dll ^
    $(TargetDir)\Microsoft.Deployment.WindowsInstaller.dll ^
    $(TargetDir)\CustomAction.config

Dans votre fichier .wxs, votre clé binaire ressemblera à:

<Binary Id="Managed_custom_action_CA_dll" 
        SourceFile="$(var.Managed_custom_action.TargetDir)$(var.Managed_custom_action.TargetName)_pkg.dll" />

Pour qu'ils CustomAction.config, vous pouvez trouver des exemples en ligne.

Ceci est la meilleure façon que je l'ai trouvé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top