如何构建“添加/删除程序”列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何构建“添加/删除程序”列表?相关的知识,希望对你有一定的参考价值。

我有一个Wix Bundle Bootstrapper安装2个MSI文件。如果我使用引导程序,“添加/删除程序”列表仅包含boostrapper的条目。

如果我单独使用MSI文件,我会在此列表中获得两个单独的条目,每个条目对应一个MSI文件。

正式记录的方法是如何构建控制面板中“添加/删除程序”列表中的条目?

具体来说,they tell us -

使用Windows Installer配置“添加/删除程序”

通过在应用程序的Windows Installer程序包中设置某些安装程序属性的值,可以提供在控制面板中配置“添加/删除程序”所需的所有信息。设置这些属性会自动将相应的值写入注册表。 (......)

他们also tell us about

卸载注册表项

以下安装程序属性提供在注册表项下写入的值:

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall

这些值存储在由应用程序的产品代码GUID标识的子项中。

但是,在这里输入一个条目是否足够,以及需要哪些子键或值条目并不明显。

答案

老实说,我不确定究竟是什么问题 - 但我会试一试。 WiX的Burn功能将通过抑制单个MSI文件显示在添加/删除列表中,在Add / Remove中创建单个条目。

在引擎盖下,这是通过在安装期间将ARPSYSTEMCOMPONENT property设置为等于1来完成的(或者它们通过一些技术上不同但在功能上与我不熟悉的方式相同的方式实现相同的效果)。

您可以在安装期间自己设置此属性(指定为msiexec.exe的参数)以隐藏Add / Remove列表中的任何MSI。从技术上讲,它将转换为写入MSI的卸载注册表项的DWORD注册表值SystemComponent = 1(根据安装类型和MSI体系结构,有几种不同的注册表值):

  • 64位:HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall{ProductCode}
  • 32位:HKLMSOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionUninstall{ProductCode}
  • 每用户:HKCUSoftwareMicrosoftWindowsCurrentVersionUninstall{ProductCode}

您可以选择在“添加/删除”列表中显示使用“刻录”安装的所有MSI文件。你只需将Visible attribute设置为yes:

<MsiPackage SourceFile="MyMsi.msi" Visible="yes" />

这只是MsiPackage element - 你显然需要将它插入一个适当的刻录源文件与ChainBundleWix元素。 Here is a larger sample。和here is a sample of customizing the WiX Burn GUI。我将在Bootstrapping上提供一个指向WiX教程的链接。

请注意,我认为Add / Remove中的Burn条目可能始终可见 - 除了单独的MSI包/ EXE包之外。可能有一种方法可以自定义这个我不熟悉的方法。

以上是关于如何构建“添加/删除程序”列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使列表视图出现在片段中?

从添加/删除程序中删除错误安装

如何从一组中继容器中组合片段?

如何在片段中填充列表视图?

如何将列表视图中的数据从一个片段发送到另一个片段

一旦单击带有 in 片段的回收器列表项,如何将片段意向活动,以及如何获取回收器项目值?