2017-06-02 4 views
0

I hérité d'un projet d'installation, et lorsque je tente d'exécuter le fichier .msi en utilisant msiexec dans la ligne de commande, et je laisse la propriété, ou indiquez-être { }, alors il est changé en '1' ou vrai.la valeur de Checkbox passe de blanc à true lorsqu'il est exécuté dans cmdline avec msiexec

Ce n'est pas le cas quand je lance le msi avec l'interface graphique. Si je ne coche pas la case, elle reste décochée.

Voici un exemple de ce que je cours dans la ligne de commande:

msiexec.exe /i D:\BeanLocalDev\Development\Setup2015.msi CHKVSEXTENSION={} /QN /L*V D:\BeanLocalDev\Development\Setup2015\Debug\log.txt 

A partir du fichier journal:

MSI (s) (F0:1C) [20:29:42:324]: Doing action: 
CustomCheckA_SetProperty_CHECKBOX2 
MSI (s) (F0:1C) [20:29:42:325]: Note: 1: 2235 2: 3: ExtendedType 4: SELECT 
`Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` 
WHERE `Action` = 'CustomCheckA_SetProperty_CHECKBOX2' 
MSI (s) (F0:1C) [20:29:42:325]: PROPERTY CHANGE: Modifying CHKVSEXTENSION 
property. Its current value is '{}'. Its new value: '1'. 
Action start 20:29:42: CustomCheckA_SetProperty_CHECKBOX2. 
Action ended 20:29:42: CustomCheckA_SetProperty_CHECKBOX2. Return value 1. 

Comment puis-je modifier dans Visual Studio dans le projet d'installation?

Répondre

0

Vous ne pouvez pas modifier directement dans le projet d'installation. Pour une raison quelconque, VS insère des actions personnalisées pour vider les valeurs des cases à cocher au début de la séquence de l'interface utilisateur et exécuter la séquence. Cela n'a pas d'importance dans la séquence de l'interface utilisateur, car AVANT que les valeurs soient entrées, mais dans la séquence d'exécution, elle vide les valeurs de la ligne de commande.

Cela signifie que vous auriez besoin de modifier le fichier MSI après la construction (par exemple avec Orca). Dans la table InstallExexecuteSequence, il y aura un appel à l'action personnalisée qui réinitialise votre propriété, quelque chose comme CustomCheckA_SetProperty_CHECKBOX1. Si le nom de votre propriété est CHKVSEXTENSION puis ajouter une condition dans la ligne de condition de ne pas CHKVSEXTENSION ce qui signifie qu'il réinitialiser que si elle est pas déjà été réglée.