Windows installer Installshield基本MSI:有条件卸载组件

Windows installer Installshield基本MSI:有条件卸载组件,windows-installer,installshield,custom-action,Windows Installer,Installshield,Custom Action,我有一个使用Installshield 2012创建的基本MSI设置 卸载此安装程序时,我必须检查特定条件,根据此条件,我必须保留或卸载某些组件的文件/文件夹/快捷方式 现在,我已经在这些组件上设置了“Permanent=Yes”,并从自定义操作中删除托管程序集中的文件/文件夹/快捷方式 有没有更好的方法来实现我的目标?您可能应该考虑选择或取消选择功能,而不是组件。Windows Installer型号采用选定的功能,然后安装这些功能所需的组件 如果这些文件/文件夹/快捷方式的安装有条件的话,你

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

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

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


有没有更好的方法来实现我的目标?

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

如果这些文件/文件夹/快捷方式的安装有条件的话,你应该把它们看作是一个可选特性的组件。然后,您可以使用为安装设置适当的安装级别,以便根据条件安装或不安装可选功能。在处理中指定了要素级别,可以修改要素的级别值


文档中对此进行了解释:

永久性是永久性的,因此标记为永久性的组件永远不会被移除。您可能可以将此操作与有条件删除组件安装的数据相结合,但这是一个混乱的命题。@MichaelUrman现在我正在从调用c#dll中函数的自定义操作中删除文件。但是我在dll中硬编码了文件名,这是一件坏事。我没有找到在运行时从自定义操作中设置“Permanent=No”的方法,也没有找到调用Msi…-函数来删除组件的所有文件的方法。谢谢您的回答,但这些功能始终安装并有条件地卸载。好的,但Windows Installer安装是一个事务性过程,安装和“卸载”以相同的方式运行。是否添加或删除功能可以通过编写包来控制。-regardsI试图将功能条件设置为
NOT(REMOVE=“ALL”)
,但该功能仍被卸载。因为我是MSI的新手,我不知道这种尝试是否完全错误。我尝试搜索谷歌,但没有找到解决方案(或者使用了错误的关键字)。