Visual studio 2015 复选框';使用msiexec在cmdline中运行时,s值将从空白更改为true

Visual studio 2015 复选框';使用msiexec在cmdline中运行时,s值将从空白更改为true,visual-studio-2015,installation,setup-project,windows-installer,Visual Studio 2015,Installation,Setup Project,Windows Installer,我继承了一个安装项目,当我尝试在命令行中使用msiexec运行msi文件时,我保留了该属性,或将其指定为{},然后它会被更改回“1”或true 当我使用GUI运行msi时,情况并非如此。如果我不选中复选框,它将保持未选中状态 下面是我在命令行中运行的示例: msiexec.exe /i D:\BeanLocalDev\Development\Setup2015.msi CHKVSEXTENSION={} /QN /L*V D:\BeanLocalDev\Development\Setup2015

我继承了一个安装项目,当我尝试在命令行中使用msiexec运行msi文件时,我保留了该属性,或将其指定为{},然后它会被更改回“1”或true

当我使用GUI运行msi时,情况并非如此。如果我不选中复选框,它将保持未选中状态

下面是我在命令行中运行的示例:

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

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.

如何在Visual Studio的安装项目中更改此设置?

您不能在安装项目中直接更改它。出于某种原因,VS插入自定义操作以在UI序列和执行序列的早期清空复选框的值。这在UI序列中并不重要,因为它在输入值之前,但在执行序列中,它会将命令行中的值清空

这意味着您需要在构建之后更改MSI文件(例如使用Orca)。在InstallExecuteSequence表中,将调用重置属性的自定义操作,类似于CustomCheckA_SetProperty_CHECKBOX1。如果属性的名称为CHKVSEXTENSION,则在NOT CHKVSEXTENSION的条件行中添加一个条件,这意味着只有在尚未设置的情况下才会重置该条件