12
votes

MSIEXEC ne passe pas les paramètres à une action personnalisée

J'ai une action personnalisée à l'intérieur d'un installateur MSI qui apporte des modifications à un fichier de configuration. Mon exigence est d'exécuter l'installation en mode silencieux afin que j'utilise MSIEXEC. Voici la commande: xxx

myContextParamètre n'est jamais transmis à l'action personnalisée alors quand je le fais Context.Parameters ["MyContextParameter"] I Obtenir un NULL NULL .

Lorsque j'exécute mon MSI en mode UI, le paramètre est correctement réduit. Je me suis également assuré que le nom de la propriété est correctement défini dans le personnalisagedata .


0 commentaires

4 Réponses :


1
votes

Si vous souhaitez pouvoir passer des paramètres de l'extérieur, vous devez utiliser AllCaps dans vos noms de paramètres. Je sais que ça sonne bizarre, mais essayez-le! : -)


3 commentaires

Vous voulez dire appelez-le comme ceci: msiexec / i myInstaller.msi / l * out.txt myContextParameter = valeur1


Oui c'est ça. Vous souvenez-vous de changer context.parameters ["myContextParameter"] aswell?


Ouais le contexte.paramètres ne contient rien!



7
votes

Mixtcase code> Les propriétés sont "privées" et ne seront pas transmises à partir de la ligne de commande.

allcaps code> Les propriétés sont "publiques" et peuvent être transmises sur le Ligne de commande. p>

Cependant, seul Secure Les propriétés publiques sont transmises au "serveur" (c.-à-d. conservé lors de l'élévation de l'UAC). Voir le SecurecustomProperties Documentation de propriété. P>

En supposant que vous essayez d'accéder à cette propriété dans une autorité de certification différée, cela se passe sur le serveur de sorte que vous devez utiliser une propriété publique (toutes les capuchons) également marqués comme sécurisé. P>

Voici un exemple utilisant WIX: P>

<Property Id="MYPUBLICPROPERTY" Secure="yes" Value="{}">


4 commentaires

Merci pour votre réponse, pouvez-vous partager un exemple de la manière dont la propriété publique CA devrait être déclarée. Merci beaucoup


Eh bien, qu'est-ce que tu utilises alors?


Je pourrais ajouter que le soulignement n'est pas autorisé (rend la propriété privée). Probablement la même chose pour les autres personnages.


Même ici, n'utilisez pas Wix, bien que MS Insiders semblait l'utiliser.



8
votes

J'ai battu ma tête contre le mur sur celui-ci, alors voici ce que j'ai découvert:

Vous devez définir vos paramètres sur la commande Commandline, ainsi que sur la propriété "CustomActionData" sur chacune de vos actions personnalisées (tout ce que vous avez sous Installer, commettez, etc.)

Votre ligne de commande va ressembler à ceci:

msiexec / i myInstaller.msi myfirstparam = value1 mysecondparam = valeur2

Ensuite, votre personnalisationData doit ressembler à ceci:

/ myfirstparam = [myfirstparam] / mysecondparam = [mysecondparam]


Maintenant, voici un tas de cas spéciaux:

  • On dirait que @klaus a raison, vous devez utiliser AllCaps dans vos noms de paramètres.

  • Si vos valeurs contiennent des espaces, vous aurez besoin de citations autour d'eux dans les propriétés Commandline et de votre personnalisationData, comme dans:

    msiexec / i myInstaller.msi myfirstparam = "value1" mysecondparam = "valeur2"

    / myfirstparam = "[myfirstparam]" / mysecondparam = "[mysecondparam]"

  • Si vos valeurs se terminent par une barre oblique, comme la plupart des chemins de fichiers, vous aurez un problème étrange: lorsque la MSIEXEC construit votre personnalisageData, cela créera cette chaîne:

    / myfirstparam = "c: \ myfile \" / mysecondparam = "c: \ myfile \"

    Peu importe si vous utilisez des guillemets sur la ligne de commande ou non, si cette barre oblique est le dernier caractère de votre valeur, il sera effectivement lu comme un caractère d'échappement et échappera à la citation de votre propriété CustomActionData. Cela provoque des ravages. La solution consiste à ajouter 1) ajoutez un espace entre votre paramètre et la dernière citation, puis rappelez-vous de la couper () dans votre code quelque part ou 2) Ajouter et supprimer une barre oblique supplémentaire entre votre paramètre et votre devis, afin d'échapper à l'évasion. personnage. Voir les deux méthodes ci-dessous:

    / myfirstparam = "[myfirstparam]" / mysecondparam = "[mysecondparam] \"

    espère que cela aide.


0 commentaires

1
votes

Je sais que c'est un vieux fil, mais j'ai essayé une variété de choses ici et il semblait que j'étais à perte. J'ai ensuite trouvé le thread suivant sur MSDN:

http://social.msdn.microsoft.com/forums/windows/en-us/8DD009CE-52D5-4737-52D5-4737-98C8- 89D9831AB60b / Impossible-Pass-Pass-Paramètres-To-Msi-thro-msiexec-Via-Command-Invite? Forum = WinFormsSetUp & Prof = Obligatoire

Affichage du MSI dans ORCA, vous pouvez voir quelques entrées sous "Customaction". Ces entrées remplaceront essentiellement les valeurs transmises à partir de l'invite de commande. Si vous supprimez simplement les entrées dans la table de personnalisation, comme: "CustomTexta_setProperty_edit1", puis enregistrez le MSI (Enregistrer sous un comportement différent dans l'ORCA). Vous pouvez ensuite transmettre les valeurs de propriété de la ligne de commande au MSI. Cela me permettra d'installer à distance à partir de MSIEXEC et je suis maintenant en mesure de transmettre les paramètres à l'installation via la ligne de commande. J'imagine que cela se produit car la logique des valeurs de personnalisation est exécutée après avoir rempli les valeurs de la propriété à partir de la ligne de commande, ce qui signifie que les valeurs de personnalisation remplacent les valeurs de ligne de commande remplacées.

Il y a aussi un lien au bas du fil pour effectuer une certaine manipulation dans VS par opposition à Orca.

http://blogs.technet.com/b/alipka/archive/2007/04/20/how-a-utilisateur-custom-actions-in- Visual-Studio-Setup-Project-MSI-Du-Command-Line.aspx


0 commentaires