当使用 msiexec 在 cmdline 中 运行 时,复选框的值从空白更改为 true

Checkbox's value is changed from blank to true when run in cmdline with msiexec

我继承了一个设置项目,当我尝试在命令行中使用 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)。在 InstallExexecuteSequence table 中,将调用重置您的 属性 的自定义操作,类似于 CustomCheckA_SetProperty_CHECKBOX1。如果您的 属性 的名称是 CHKVSEXTENSION,则在 NOT CHKVSEXTENSION 的条件行中添加一个条件,这意味着只有在尚未设置时才会重置它。