MSI属性在被动,基本UI和无UI安装时清空

时间:2012-10-23 14:55:27

标签: wix windows-installer

我正在开发一个安装程序,其中包含一些自定义操作,可在以下MSI属性中查找值:

  • ADDLOCAL
  • ADDDEFAULT
  • REINSTALL
  • REMOVE

使用完整UI运行安装程序时,这些属性包含逗号分隔的功能名称列表,并根据用户选择的选项进行选择。但是,当我以被动模式运行安装程序或仅使用命令行中的基本UI(或没有UI)时,我发现属性为空/空白。只有当我从命令行明确设置它们时才有任何值。这是一种可接受的解决方法,但如果这些可以采用某种默认值,例如“all”,而不需要在命令行上传递值,那就更好了。有没有什么方法可以在WiX中指定它(我用它来构建MSI)或者我是否必须在自定义操作代码中执行某些操作(或者完全不需要其他操作)?

我查看了属性参考here,但我没有看到如何为这些属性指定默认功能。

我还感到有趣的是,如果我在安装过程中在命令行上以这种方式指定了一个功能,它似乎存储在REMOVE属性中的卸载中(换句话说,我不必传递任何参数在任何模式下卸载)。这是我可以依赖的功能吗?如果有人稍后修改了安装,它会自动更新吗?

我正在运行WiX 3.5.2519并使用Visual Studio 2010和Visual C ++作为自定义操作代码。谢谢你能给我的任何帮助!

编辑:

实际上,我错了。在卸载并运行其中一种模式时,REMOVE属性似乎始终设置为“all”,即使我在命令行上传递了不同的值或仅安装了一部分功能。这似乎破了。我在这里做错了吗?

C:\> msiexec REMOVE=FeatureName /passive /l* uninstall.log /x Product.msi

它将完全忽略我为“FeatureName”指定的内容并在其位置使用“all”。

2 个答案:

答案 0 :(得分:4)

您的自定义操作可能不应检查这些属性。相反,他们应该检查产品的功能和/或组件状态,具体取决于他们尝试做什么。在conditional statement syntax中,这看起来像$component-action&feature-action(您使用其尝试对其进行操作的组件或功能的名称)。在C ++中(对于自定义操作内部),这看起来像MsiGetFeatureStateMsiGetComponentState,当然这些在大多数其他语言中都可以通过类似的方式提供(例如session.FeatureRequestState / {{1用你不应该使用的语言。)

答案 1 :(得分:0)

建议将安装使用的所有属性以初始值输入Property table。安装程序在安装启动时将属性设置为这些值。空白是可接受值的属性和安装程序中内置的属性不需要初始化。

然后,您可以按编程方式或在命令行上更改默认值,如下所述:Using Properties