【问题标题】:Installshield Basic MSI: conditionally uninstall componentsInstallshield Basic MSI:有条件地卸载组件
【发布时间】:2012-10-14 13:57:34
【问题描述】:

我有一个使用 Installshield 2012 创建的基本 MSI 设置。

卸载此设置时,我必须检查特定条件,根据此条件,我必须保留或卸载某些组件的文件/文件夹/快捷方式。

现在我在这些组件上设置了“Permanent=Yes”,并删除了从自定义操作调用的托管程序集中的文件/文件夹/快捷方式。

有没有更好的方法来做我想做的事?

【问题讨论】:

  • 永久是永久的,因此标记为永久的组件永远不会被删除。您也许可以将此与有条件地删除组件安装的数据相结合,但这是一个混乱的提议。
  • @MichaelUrman 现在我正在从调用 c# dll 中的函数的自定义操作中删除文件。但是我硬编码了 dll 中的文件名,这是一件坏事。我没有找到在运行时通过自定义操作设置“Permanent=No”或调用 Msi...- 函数来删除组件的所有文件的方法。

标签: windows-installer installshield custom-action


【解决方案1】:

您可能应该考虑选择或取消选择功能而不是组件。 Windows Installer 模型采用选定的功能,然后安装这些功能所需的组件。

如果这些文件/文件夹/快捷方式的安装是有条件的,您应该将它们视为属于可选功能的组件。然后您可以使用MsiSetInstallLevel 为安装设置适当的安装级别,以便它根据条件安装或不安装您的可选功能。特征级别在Feature table中指定,处理Condition Table可以修改特征的级别值。

文档中对此进行了解释:Working with Features and Components

【讨论】:

  • 感谢您的回答,但这些功能始终安装并且有条件地卸载
  • 好的,但是 Windows Installer 安装是一个事务性过程,安装和“卸载”以相同的方式运行。可以通过创作包来控制是否添加或删除功能。 - 问候
  • 我尝试将功能条件设置为NOT (REMOVE="ALL"),但该功能仍然被卸载。因为我是 MSI 的新手,所以我不知道这种尝试是否完全错误。我尝试搜索谷歌,但我没有找到解决方案(或使用了错误的关键字)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多