Comment définir une case à cocher pour « non contrôlée » de la ligne de commande msiexec?

StackOverflow https://stackoverflow.com/questions/2992006

  •  24-10-2019
  •  | 
  •  

Question

J'ai un msi (écrit avec WIX) qui a une case à cocher lié à une propriété personnalisée (appeler MY_PROPERTY). Je voudrais lancer cette msi de la ligne de commande, en spécifiant 0 (non cochée) ou 1 (vérifié) pour cette propriété. Mon script déterminera la valeur appropriée (en fonction de l'environnement) et injecter cette valeur dans la ligne de commande msiexec. Ma ligne de commande ressemble à quelque chose comme ceci:

msiexec /i my_installer.msi MY_PROPERTY=$value

Où $ valeur est 1 ou 0, en fonction de l'environnement. Le problème est que peu importe quelle valeur je l'offre pour MY_PROPERTY à la ligne de commande, la case à cocher est toujours cochée (et la propriété sera toujours mis à 1). La seule façon de rendre la case cochée est de ne pas spécifier la propriété (laisser non défini). Il convient de noter que ce problème se produit indépendamment de si oui ou non l'interface utilisateur affiche (en ajoutant « / quiet » à la ligne de commande ci-dessus ne change pas ce comportement).

Ce poste de msdn semble indiquer que c'est un connu « bug » dans les fenêtres d'installation (ou plus exactement, quel que soit le système authoring a écrit le msi). Un hack msi post-construction est proposé comme la solution. Je me demande si quelqu'un a rencontré ce problème et trouver une meilleure solution / solution. Merci!

Mise à jour

Je vois trois solutions à ce problème:

  1. De @Damien, ont le script wrapper passe pas la propriété à msiexec lorsque sa valeur est 0. Cela rend le script plus complexe et me empêcherait probablement d'être en mesure de passer outre la valeur d'une case à cocher par défaut « cochée ».
  2. Urman @ Michael, ajoutez une action personnalisée qui efface la propriété si sa valeur est égale à zéro. Cela rend le msi plus complexe, et je dois ajouter une telle action personnalisée pour chaque case à cocher dans l'interface utilisateur.
  3. Une autre idée est de simplement interdire l'utilisation de cases à cocher dans nos programmes d'installation de msi, et l'utilisation des boîtes de radio ou de menus déroulants pour « vrai / faux » questions au lieu. Bien que cela limite les options de l'interface utilisateur pour nos installateurs, il conseillerai les scripts permettent wrapper de rester simple, et ne nécessite pas des actions personnalisées à « pirater » les propriétés.

Je penche actuellement vers l'option 3, même si l'option 1 est probablement la meilleure réponse à ma question initiale. Toute pensée?

Était-ce utile?

La solution

Voici comment il est « censé » au travail - en gros, la propriété n'existe pas jusqu'à ce qu'un utilisateur vérifie la case à cocher, il est « ensemble » (existe). Donc, si vous voulez faire une action personnalisée lorsqu'une case est cochée, vous vérifier l'existence de la propriété comme condition pour l'exécution de l'action personnalisée, au lieu de vérifier la valeur que l'accessoire personnalisé est réglé sur.

Je pense que la meilleure façon de gérer cela de la ligne de commande est ce que vous avez déjà dit: si vous voulez que la case à cocher pour sélectionner, spécifier l'accessoire personnalisé sur la ligne de commande, sinon, ne pas et que la case à cocher non être sélectionné.

Autres conseils

Comme vous l'avez découvert, des cases à cocher sont vraies (vérifiés) lorsque la propriété est définie (non vide) et faux (non cochée) lorsque la propriété est définie (vide). On dirait que vous avez besoin de convertir un environnement 1 ou 0 chaîne à une case à cocher true / false, où le 1 ou 0 est passé dans la ligne de commande. Essayez d'utiliser un ensemble-propriété action personnalisée qui définit votre propriété à {} (blanc) avec une condition quand la propriété est déjà "0". Planifiez tôt à la fois l'interface utilisateur Installer et installer Exécuter des séquences.

Mise à jour tardive: En ce qui concerne la nécessité de multiples actions personnalisées pour gérer cela pour plusieurs cases à cocher, vous avez le choix. Vous pouvez créer des actions ensemble de propriété multiples (avantages: facile à dire ce qu'ils font, le coût: beaucoup d'entre eux), ou vous pouvez créer une seule action personnalisée basée code qui marche

scroll top