Nous utilisons WiX depuis un certain temps maintenant, et malgré les reproches habituels concernant la facilité d'utilisation, cela se passe assez bien. Ce que je recherche, ce sont des conseils utiles concernant:
- Configuration d'un projet WiX (mise en page, références, modèles de fichiers)
- Intégration de WiX dans les solutions et processus de création / publication
- Configuration des programmes d'installation pour de nouvelles installations et mises à niveau
- Tous les bons hacks WiX que vous souhaitez partager
practical, answerable questions based on actual problems that you face
partie de la FAQ.Réponses:
Conservez les variables dans un
wxi
fichier include distinct . Permet la réutilisation, les variables sont plus rapides à trouver et (si nécessaire) permet une manipulation plus facile par un outil externe.Définir les variables de plate-forme pour les versions x86 et x64
Stockez l'emplacement d'installation dans le registre, permettant aux mises à niveau de trouver l'emplacement correct. Par exemple, si un utilisateur définit un répertoire d'installation personnalisé.
Remarque : le gourou de WiX, Rob Mensching, a publié un excellent article de blog qui va plus en détail et corrige un cas de bord lorsque les propriétés sont définies à partir de la ligne de commande.
Exemples utilisant 1. 2. et 3.
et
L'approche la plus simple consiste toujours à effectuer des mises à niveau majeures , car elle permet à la fois de nouvelles installations et des mises à niveau dans le même MSI. UpgradeCode est fixé sur un Guid unique et ne changera jamais, sauf si nous ne voulons pas mettre à niveau le produit existant.
Remarque : dans WiX 3.5, il y a un nouvel élément MajorUpgrade qui rend la vie encore plus facile !
Création d'une icône dans Ajout / Suppression de programmes
Sur les versions, nous mettons à jour nos programmes d'installation, en copiant le fichier msi dans un répertoire de déploiement. Un exemple de cela en utilisant une cible wixproj appelée depuis la cible AfterBuild:
Utilisez la chaleur pour récolter les fichiers avec le caractère générique (*) Guid. Utile si vous souhaitez réutiliser des fichiers WXS sur plusieurs projets (voir ma réponse sur plusieurs versions du même produit). Par exemple, ce fichier de commandes récolte automatiquement la sortie de RoboHelp.
Il se passe un peu de temps,
robocopy
en supprimant les métadonnées de la copie de travail de Subversion avant la récolte; la-dr
référence du répertoire racine est définie sur notre emplacement d'installation plutôt que sur TARGETDIR par défaut;-var
est utilisé pour créer une variable pour spécifier le répertoire source (sortie de déploiement Web).Un moyen facile d'inclure la version du produit dans le titre de la boîte de dialogue de bienvenue en utilisant Strings.wxl pour la localisation. (Crédit: saschabeaumont . Ajouté car ce bon conseil est caché dans un commentaire)
Épargnez-vous de la douleur et suivez les conseils de Wim Coehen d'un composant par fichier. Cela vous permet également de laisser de côté (ou caractère générique
*
) le GUID du composant .Rob Mensching a une manière ordonnée de dépister rapidement des problèmes dans les fichiers journaux MSI en recherchant
value 3
. Notez les commentaires concernant l'internationalisation.Lors de l'ajout de fonctionnalités conditionnelles, il est plus intuitif de définir le niveau de fonctionnalité par défaut sur 0 (désactivé), puis de définir le niveau de condition à la valeur souhaitée. Si vous définissez le niveau de fonctionnalité par défaut> = 1, le niveau de condition doit être 0 pour le désactiver, ce qui signifie que la logique de condition doit être l'opposé de ce que vous attendez, ce qui peut être déroutant :)
la source
Vérification si IIS est installé:
Vérification de la compatibilité de la métabase IIS 6 sur Vista +:
la source
Conserver tous les ID dans des espaces de noms séparés
F.
exemples: F.Documentation, F.Binaries, F.SampleCode.C.
Ex: C.ChmFile, C.ReleaseNotes, C.LicenseFile, C.IniFile, C.RegistryCA.
Ex: CA.LaunchHelp, CA.UpdateReadyDlg, CA.SetPropertyXFi.
Di.
Je trouve que cela aide énormément à garder une trace de tous les différents identifiants dans toutes les différentes catégories.
la source
Question fantastique. J'adorerais voir quelques bonnes pratiques présentées.
J'ai beaucoup de fichiers que je distribue, j'ai donc configuré mon projet dans plusieurs fichiers source wxs.
J'ai un fichier source de premier niveau que j'appelle Product.wxs qui contient essentiellement la structure de l'installation, mais pas les composants réels. Ce fichier comporte plusieurs sections:
Les autres fichiers .wix sont composés de fragments contenant des groupes de composants référencés dans la balise Feature du Product.wxs. Mon projet contient un joli regroupement logique des fichiers que je distribue
Ce n'est pas parfait, mon sens d'araignée OO pique un peu parce que les fragments doivent faire référence à des noms dans le fichier Product.wxs (par exemple, DirectoryRef), mais je trouve plus facile de conserver un seul gros fichier source.
J'adorerais entendre des commentaires à ce sujet, ou si quelqu'un a aussi de bons conseils!
la source
Ajoutez une case à cocher dans la boîte de dialogue de sortie pour lancer l'application ou le fichier d'aide.
...
Si vous le faites de cette façon, l'apparence "standard" n'est pas tout à fait correcte. La case à cocher est toujours un arrière-plan gris, tandis que la boîte de dialogue est blanche:
texte alternatif http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_1.gif
Une solution consiste à spécifier votre propre ExitDialog personnalisé, avec une case à cocher située différemment . Cela fonctionne, mais semble beaucoup de travail juste pour changer la couleur d'un contrôle. Une autre façon de résoudre le même problème consiste à post-traiter le MSI généré pour modifier les champs X, Y dans la table de contrôle pour ce contrôle CheckBox particulier. Le code javascript ressemble à ceci:
L'exécution de ce code en tant que script de ligne de commande (à l'aide de cscript.exe) après la génération du MSI (à partir de light.exe) produira un ExitDialog qui semble plus professionnel:
texte alternatif http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_2.gif
la source
WIXUI_EXITDIALOGOPTIONALCHECKBOX
par l'WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
intérieur<Publish>
Création de versions Live, Test, Training, ... en utilisant les mêmes fichiers sources.
En bref: créez un code de mise à niveau unique pour chaque programme d'installation et définissez automatiquement le premier caractère de chaque GUID pour chaque programme d'installation, en laissant les 31 restants uniques.
Conditions préalables
Hypothèses
Structure du répertoire
Processus
Exemple Config.wxi
Exemple Config.Common.wxi
Exemple Components.wxs
Remarque: je suggère maintenant de laisser l'attribut Guid hors du composant (équivalent de
*
), d'utiliser un fichier par composant et de définir le fichier comme chemin d'accès. Cela supprime le besoin d'appelerModifyComponentsGuids
et lesRevertComponentsGuids
cibles indiquées ci-dessous. Cependant, cela pourrait ne pas être possible pour tous vos composants.Exemple Setup.Live.wixproj
Dernières pensées
MISE À JOUR 1: Composant de génération automatique Guids supprime la nécessité d'appeler la tâche FileUpdate si vous créez un composant avec Guid = "*" pour chaque fichier, en définissant le fichier comme chemin d'accès.
MISE À JOUR 2: L'un des problèmes auxquels nous nous heurtons est que si vous ne générez pas automatiquement vos composants Guid et que la construction échoue, les fichiers temporaires doivent être supprimés manuellement.MISE À JOUR 3: a trouvé un moyen de supprimer la dépendance à svn: externals et la création de fichiers temporaires. Cela rend le processus de construction plus résilient (et est la meilleure option si vous ne pouvez pas utiliser de caractères génériques pour vos guides) et moins fragile s'il y a un échec de construction en lumière ou en bougie.
MISE À JOUR 4: La prise en charge de plusieurs instances à l' aide de transformations d'instance est dans WiX 3.0+, vaut également le coup d'œil.
la source
Utilisation de la journalisation de diagnostic Msi pour obtenir des informations détaillées sur les échecs
msiexec /i Package.msi /l*v c:\Package.log
Où
est le nom de votre colis et est l'endroit où vous voulez la sortie du journalCodes d'erreur Msi
Vidéo d'introduction de Wix
Oh et vidéo d'introduction de Wix aléatoire mettant en vedette "M. WiX" Rob Mensching est "une grande image conceptuelle" utile.
la source
Utilisez Javascript CustomActions parce qu'elles sont tellement faciles
Les gens ont dit que Javascript n'est pas la bonne chose à utiliser pour les actions personnalisées MSI . Raisons invoquées: difficile à déboguer, difficile à rendre fiable. Je ne suis pas d'accord. Ce n'est pas difficile à déboguer, certainement pas plus difficile que C ++. C'est juste différent. J'ai trouvé que l'écriture de CustomActions en Javascript était super facile, beaucoup plus facile que d'utiliser C ++. Plus vite. Et tout aussi fiable.
Il n'y a qu'un seul inconvénient: les actions personnalisées Javascript peuvent être extraites via Orca, tandis qu'une autorité de certification C / C ++ nécessiterait une ingénierie inverse. Si vous considérez que votre magie d'installation est une propriété intellectuelle protégée, vous voudrez éviter le script.
Si vous utilisez un script, il vous suffit de commencer par une structure. En voici quelques-uns pour vous aider à démarrer.
Code Javascript "passe-partout" pour CustomAction:
Ensuite, enregistrez l'action personnalisée avec quelque chose comme ceci:
Vous pouvez bien sûr insérer autant de fonctions Javascript que vous le souhaitez, pour plusieurs actions personnalisées. Un exemple: j'ai utilisé Javascript pour faire une requête WMI sur IIS, pour obtenir une liste des sites Web existants, sur lesquels un filtre ISAPI pourrait être installé. Cette liste a ensuite été utilisée pour remplir une zone de liste affichée plus loin dans la séquence d'interface utilisateur. Tout est très simple.
Sur IIS7, il n'y a pas de fournisseur WMI pour IIS, j'ai donc utilisé l'
shell.Run()
approche pour appeler appcmd.exe pour effectuer le travail. Facile.Question connexe: À propos des actions personnalisées Javascript
la source
Peter Tate a déjà montré comment vous pouvez définir des définitions de ComponentGroup réutilisables dans des fragments wix séparés. Quelques astuces supplémentaires liées à cela:
Alias de répertoire
Les fragments de groupe de composants n'ont pas besoin de connaître les répertoires définis par les wxs du produit principal. Dans votre fragment de groupe de composants, vous pouvez parler d'un dossier comme celui-ci:
Le produit principal peut alors alias un de ses répertoires (par exemple "productInstallFolder") comme ceci:
Graphique de dépendance
Les éléments ComponentGroup peuvent contenir des éléments enfants ComponentGroupRef. C'est très bien si vous avez un grand pool de composants réutilisables avec un graphique de dépendance complexe entre eux. Vous venez de configurer un ComponentGroup dans son propre fragment pour chaque composant et déclarez les dépendances comme ceci:
Si vous référencez maintenant le groupe de composants "B" dans votre configuration car il s'agit d'une dépendance directe de votre application, il récupérera automatiquement le groupe de composants "A" même si l'auteur de l'application ne s'est jamais rendu compte qu'il s'agissait d'une dépendance de "B". Cela "fonctionne" aussi longtemps que vous n'avez pas de dépendances circulaires.
Wixlib réutilisable
L'idée de graphique de dépendance ci-dessus fonctionne mieux si vous compilez les composants big-pool-o-reusable-en un wixlib réutilisable avec lit.exe. Lors de la création d'une configuration d'application, vous pouvez référencer ce wixlib un peu comme un fichier wixobj. L'éditeur de liens candle.exe éliminera automatiquement tous les fragments qui ne sont pas "extraits" par le ou les fichiers wxs du produit principal.
la source
Je suis surpris que personne n'ait mentionné l'utilisation de T4 pour générer le fichier WXS lors de la construction. J'ai appris cela grâce à Henry Lee @ New Age Solutions .
Essentiellement, vous créez une tâche MSBuild personnalisée pour exécuter un modèle T4, et ce modèle génère le WXS juste avant la compilation du projet Wix. Cela vous permet (selon la façon dont vous l'implémentez) d'inclure automatiquement tous les assemblys issus de la compilation d'une autre solution (ce qui signifie que vous n'avez plus à modifier les wx à chaque fois que vous ajoutez un nouvel assemblage).
la source
Utilisation de Heat.exe pour briser le visage et infliger "Epic Pwnage" sur des installations douloureusement grandes
Développer les réponses de Si et Robert-P sur la chaleur.
Traduction: (Utilisation de la chaleur pour éviter de taper des fichiers individuels dans le projet à la main et pour automatiser les builds pour un processus global plus facile.)
Syntaxe de la chaleur WiX 2.0 détaillée
Pour les versions plus récentes (pas si différentes des anciennes versions mais il y a des changements de syntaxe potentiellement ennuyeux ....) allez dans le répertoire Heat is in from cmd.exe et tapez simplement heat mais j'ai un exemple ici pour de l'aide avec des versions plus récentes si nécessaire.
Ajout des éléments suivants à votre événement de
génération dans Visual Studio 2010. (Cliquez avec le bouton droit sur Projet-> Propriétés -> Événements de génération-> Événements de pré-génération)
$(WIX)bin\heat.exe" dir "$(EnviromentVariable)" -cg GroupVariable -gg -scom -sreg -sfrag - srd -dr INSTALLLOCATION -var env.LogicPath -out "$(FragmentDir)\FileName.wxs
Génère des guides lorsque la chaleur est exécutée (comme lorsque vous exécutez la commande ci-dessus)
Ne saisissez pas les "fichiers COM"
Ne saisissez pas les "fichiers de registre"
Ne saisissez pas les «fragments»
Ne saisissez pas le "root root"
dir indique que Heat doit rechercher dans un dossier
Le nom de la variable que vous ajouteriez aux variables du préprocesseur dans la section Propriétés du projet (Projet avec le bouton droit de la souris, Aller aux propriétés) -> Créer où il est indiqué Définir les variables du préprocesseur (en supposant que Visual Studio 2010)
Pas de guillemets doubles mais se termine par un point-virguleLe ComponentGroup qui sera référencé à partir du fragment créé dans le fichier wxs principal
Le répertoire de fragments où le fragment wxs de sortie sera stocké
Le nom du fichier
Tutoriel complet ici, donc freakin utile
Partie 1 Partie 2
la source
Y compris les objets COM:
heat
génère la plupart (sinon la totalité) des entrées de registre et des autres configurations nécessaires pour celles-ci. Réjouir!Y compris les objets COM gérés (également appelés objets COM .NET ou C #)
L'utilisation
heat
sur un objet COM géré vous donnera un document Wix presque complet.Si vous n'avez pas besoin de la bibliothèque disponible dans le GAC (c'est-à-dire, disponible globalement: la plupart du temps, vous n'en avez pas besoin avec vos assemblys .NET de toute façon - vous avez probablement fait quelque chose de mal à ce stade si elle n'est pas destinée à être une bibliothèque partagée), vous devez vous assurer de mettre à jour la
CodeBase
clé de registre à définir[#ComponentName]
. Si vous prévoyez de l'installer sur le GAC (par exemple, vous avez créé une nouvelle bibliothèque commune impressionnante que tout le monde voudra utiliser), vous devez supprimer cette entrée et ajouter deux nouveaux attributs à l'File
élément:Assembly
etKeyPath
. L'assembly doit être défini sur ".net" etKeyPath
doit être défini sur "oui".Cependant, certains environnements (en particulier tout ce qui a de la mémoire gérée comme les langages de script) auront également besoin d'accéder à Typelib. Assurez-vous de lancer
heat
votre typelib et de l'inclure.heat
générera toutes les clés de registre nécessaires. À quel point cela est cool?la source
Installation sur
C:\ProductName
Certaines applications doivent être installées sur
C:\ProductName
ou quelque chose de similaire, mais 99,9% (sinon 100%) des exemples de l'installation nette surC:\Program Files\CompanyName\ProductName
.Le code suivant peut être utilisé pour définir la
TARGETDIR
propriété à la racine duC:
lecteur (extrait de la liste des utilisateurs WiX ):REMARQUE: Par défaut,
TARGETDIR
ne pointe pas versC:\
! Il pointe plutôt versROOTDRIVE
lequel pointe à son tour vers la racine du lecteur avec le plus d'espace libre ( voir ici ) - et ce n'est pas nécessairement leC:
lecteur. Il peut y avoir un autre disque dur, une partition ou un lecteur USB!Ensuite, quelque part sous votre
<Product ...>
balise, vous avez besoin des balises de répertoire suivantes comme d'habitude:la source
WindowsVolume
?WindowsVolume
propriété ne peut pas être utilisée en tant queDirectory
(le compilateur donne une erreur / un avertissement), comme indiqué ici et ici . Personnellement, je trouve cette solution déroutante.Variables environnementales
Lors de la compilation de vos documents Wxs en code wixobj, vous pouvez utiliser des variables d'environnement pour déterminer diverses informations. Par exemple, supposons que vous souhaitiez modifier les fichiers à inclure dans un projet. Disons que vous avez une variable d'environnement appelée RELEASE_MODE, que vous définissez juste avant de construire votre MSI (soit avec un script, soit manuellement, cela n'a pas d'importance) Dans votre source wix, vous pouvez faire quelque chose comme:
puis plus tard dans votre code, utilisez-le en place pour changer à la volée votre document wxs, par exemple:
la source
Utilisation de la spéciale RobM « Souvenez - vous de la propriété » modèle
http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern
la source
Création d'une action personnalisée pour WIX écrite en code managé (C #) sans votif
http://www.codeproject.com/KB/install/wixcustomaction.aspx
la source
Modification des boîtes de dialogue
Une bonne capacité à modifier les boîtes de dialogue est d'utiliser SharpDevelop dans une version 4.0.1.7090 (ou supérieure). Avec l'aide de cet outil, une boîte de dialogue autonome (fichiers wxs provenant de sources WiX comme par exemple InstallDirDlg.wxs) peut être ouverte, prévisualisée et modifiée en mode Création.
la source
Définition de l'indicateur IIS enable32BitAppOnWin64 http://trycatchfail.com/blog/post/WiX-Snippet-change-enable32BitAppOnWin64.aspx
la source
Modifiez le "Prêt à installer?" (aka VerifyReadyDlg) pour fournir un résumé des choix effectués.
Il ressemble à ceci:
texte alternatif http://i46.tinypic.com/s4th7t.jpg
Faites-le avec une action personnalisée Javascript:
Code Javascript:
Déclarez le Javascript CA:
Attachez l'AC à un bouton. Dans cet exemple, l'autorité de certification est déclenchée lorsque vous cliquez sur Suivant dans CustomizeDlg:
Question SO connexe: Comment puis-je définir, lors de l'exécution, le texte à afficher dans VerifyReadyDlg?
la source
Mettez des composants qui peuvent être corrigés individuellement dans leurs propres fragments
Il en va de même pour les programmes d'installation de produits et les correctifs que si vous incluez un composant dans un fragment, vous devez inclure tous les composants dans ce fragment. Dans le cas de la construction d'un programme d'installation, si vous manquez des références de composants, vous obtiendrez une erreur de liaison de light.exe. Cependant, lorsque vous créez un correctif, si vous incluez une référence de composant unique dans un fragment, tous les composants modifiés de ce fragment s'afficheront dans votre correctif.
comme ça:
au lieu de cela:
En outre, lors de l'application de correctifs à l'aide de la rubrique «Utilisation de purement WiX» du fichier d'aide WiX.chm, utilisez cette procédure pour générer le correctif:
il ne suffit pas de simplement construire la version 1.1 du product.wixpdb en utilisant les composants dans des fragments séparés. Assurez-vous donc de fragmenter correctement votre produit avant l'expédition.
la source
Impression du CLUF à partir de Wix3.0 et versions ultérieures
1) Lorsque vous compilez votre code source wix, light.exe doit référencer le WixUIExtension.dll en ligne de commande. Utilisez le commutateur de ligne de commande -ext pour cela.
2) Si, lorsque vous ajoutez la référence à WixUIExtension.dll, votre projet ne parvient pas à se compiler, cela est probablement dû à des conflits d'ID de boîte de dialogue, c'est-à-dire que votre projet utilisait les mêmes ID de boîte de dialogue que certaines boîtes de dialogue standard dans WixUIExtension.dll, donnez des identifiants différents à vos dialogues. C'est un problème assez courant.
3) Votre boîte de dialogue de licence doit avoir le contrôle ScrollableText avec l'ID "LicenseText". Wix recherche exactement ce nom de contrôle lors de l'impression.
et un PushButton qui fait référence à l'action personnalisée
4) Définissez CustomAction avec Id = "PrintEula" comme ceci:
Remarque: BinaryKey est différent dans Wix3.0 par rapport à Wix2.0 et doit être exactement "WixUIWixca" (sensible à la casse).
Lorsque l'utilisateur appuie sur le bouton, il / elle sera présenté avec la boîte de dialogue standard Sélectionner l'imprimante et pourra imprimer à partir de là.
la source
Nous affichons la version du produit quelque part (minuscule) dans le premier écran de l'interface graphique. Parce que les gens ont tendance à faire des erreurs en choisissant la bonne version à chaque fois. (Et gardez-nous les développeurs à la recherche des âges ..)
Nous avons configuré TFSBuild pour générer également des transformations (fichiers .mst) avec la configuration de nos différents environnements. (Nous connaissons tous les environnements dans lesquels nous devons déployer).
Comme le billet de blog original de Grant Holliday est en panne, je copie son contenu collé ici:
Tâche MSBuild pour générer des fichiers de transformation MSI à partir de XMLMarch 11 2008
Dans mon article précédent, j'ai décrit comment vous pouvez utiliser les fichiers de transformation MSI (* .mst) pour séparer les paramètres de configuration spécifiques à l'environnement d'un package MSI générique.
Bien que cela offre un niveau de flexibilité dans votre configuration, les fichiers Transform présentent deux inconvénients:
Heureusement, nous pouvons utiliser la bibliothèque d'objets Microsoft Windows Installer (c: windowssystem32msi.dll) pour ouvrir des «bases de données» MSI et créer des fichiers de transformation.
Remerciements à Alex Shevchuk - De MSI à WiX - Partie 7 - Personnalisation de l'installation à l'aide de Transforms pour nous montrer comment y parvenir avec VbScript. Essentiellement, tout ce que j'ai fait est de prendre l'exemple d'Alex et en utilisant Interop.WindowsInstaller.dll, j'ai implémenté une tâche MSBuild. La tâche MSBuild
Téléchargez le code source et l'exemple transforms.xml ici (~ 7Kb Zipped VS2008 Solution)
la source
Avant de déployer un package d'installation, je contrôle toujours son contenu.
C'est juste un simple appel sur la ligne de commande (selon le post de Terrences) ouvrez la ligne de commande et entrez
Cela extraira le contenu du package dans un sous-répertoire «Extraire» avec le chemin d'accès actuel.
la source
Au lieu d'ORCA, utilisez InstEd qui est un bon outil pour afficher les tables MSI. Il a également la possibilité de différencier deux packages par Transform -> Compare To ...
De plus, une version Plus avec des fonctionnalités supplémentaires est disponible. Mais la version gratuite offre également une bonne alternative pour Orca.
la source
Enregistrement d'assemblys .NET pour COM Interop avec compatibilité x86 / x64
NB Ce fragment est essentiellement le même que REGASM Assembly.dll / codebase
Deux choses se passent dans cet exemple, alors voici le code et je l'expliquerai par la suite ...
Si vous vous posiez la question, il s'agit en fait d'un pilote de télescope ASCOM .
Tout d'abord, j'ai suivi les conseils ci-dessus et créé quelques variables platforma dans un fichier séparé, vous pouvez les voir dispersées à travers le XML.
La partie si-alors-autre près du sommet traite de la compatibilité x86 vs x64. Mon assemblage cible "N'importe quel CPU", donc sur un système x64, je dois l'enregistrer deux fois, une fois dans le registre 64 bits et une fois dans les
Wow6432Node
zones 32 bits . Le if-then-else me configure pour cela, les valeurs sont utilisées dans uneforeach
boucle plus tard. De cette façon, je n'ai à créer les clés de registre qu'une seule fois (principe DRY).L'élément file spécifie la DLL d'assembly en cours d'installation et d'enregistrement:
Rien de révolutionnaire, mais remarquez que
Assembly=".net"
- cet attribut à lui seul ferait que l'assemblage soit placé dans le GAC, ce qui n'est PAS ce que je voulais. Utiliser l'AssemblyApplication
attribut pour pointer vers lui-même est simplement un moyen d'empêcher Wix de placer le fichier dans le GAC. Maintenant que Wix sait que c'est un assembly .net, il me permet d'utiliser certaines variables de liant dans mon XML, telles que!(bind.assemblyFullname.filDriverAssembly)
pour obtenir le nom complet de l'assembly.la source
Définissez la
DISABLEADVTSHORTCUTS
propriété pour forcer tous les raccourcis publiés dans votre programme d'installation à devenir des raccourcis normaux, et vous n'avez pas besoin d'inclure une clé de registre fictive à utiliser comme chemin de clé.Je pense que Windows Installer 4.0 ou supérieur est une exigence .
la source
C'est une belle structure mais d'après mon expérience, je me demande comment vous répondez à ces conditions:
A. Vos installations semblent toutes atterrir dans la même destination. Si un utilisateur doit installer les 3 versions à la fois, votre processus le permettra. Peuvent-ils dire sans ambiguïté quelle version de chaque exécutable ils déclenchent?
B. Comment gérez-vous les nouveaux fichiers qui existent dans TEST et / ou TRAINING mais pas encore dans LIVE?
la source
Voici un moyen d'aider les grands projets Web à vérifier que le nombre de fichiers déployés correspond au nombre de fichiers intégrés dans un MSI (ou module de fusion). Je viens d'exécuter la tâche MSBuild personnalisée sur notre application principale (toujours en développement) et elle a détecté pas mal de fichiers manquants, principalement des images, mais quelques fichiers javascript s'étaient glissés vers!
Cette approche (jetant un œil à la table File de MSI en se connectant à la cible AfterBuild du projet WiX) pourrait fonctionner pour d'autres types d'application où vous avez accès à une liste complète des fichiers attendus.
la source
Effectuer une réinstallation forcée lorsqu'une installation ne permet pas la désinstallation ou la réinstallation et ne revient pas en arrière.
Script VBscript utilisé pour remplacer une installation qui ne se désinstalle pas pour une raison quelconque.
la source
Créez une interface utilisateur dotée d'une action personnalisée qui définira une variable et l'interface utilisateur désactivera / activera le bouton suivant (ou similaire) en fonction de la variable définie dans l'action personnalisée.
Pas aussi simple que vous le pensez, pas trop difficile, mais pas documenté nulle part!
Interactions Wix avec conditions, propriétés et actions personnalisées
la source