我需要为我们编写的应用程序安装插件(或附加组件)。我使用 WiX 作为应用程序的安装程序。在我看来,插件是应用程序的可选部分。它需要集成到应用程序的文件系统结构中,但也可以在以后添加,即使是无法控制原始应用程序安装程序的人。因此,我发现 WiX 的所有开箱即用机制都不足:无论是小/次要/主要更新还是补丁机制似乎都不符合前面短语中所述的先决条件。所以我发现对我来说最好的方法是让原始安装程序留下一个注册表项,以某种方式指定安装插件的位置,并为插件构建单独的安装程序。这留下了一个问题,如何继续卸载,但这是我以后可以处理的问题。有没有人有更好的主意?WiX中是否有任何我不知道的专门针对此的机制?谢谢你的建议,N-Man
问问题
7843 次
2 回答
3
注册表项是解决此问题的一种流行方法。创建插件目录的更以 Windows Installer 为中心的方法是使用 Component 创建插件目录,并让其他人使用 ComponentSearch 来查找 Component/@Guid。
如果没有外部引导程序/链接器管理您的卸载,在您的应用程序同时卸载插件将是困难的(可能是不可能的)。将插件的卸载与应用程序完全分离要容易得多,因此可以独立删除它们。
于 2009-08-27T17:27:26.847 回答
0
所以我发现对我来说最好的方法是让原始安装程序留下一个注册表项,以某种方式指定安装插件的位置,并为插件构建单独的安装程序。
是的,我相信这是标准方法。您的主应用程序安装程序可以留下一个关于在哪里安装插件的注册表项,如下所示:
<Registry Id='WritePluginsLoc'
Root='HKLM'
Key='Software\Acme\Foo 1.x'
Name='PluginsLocation'
Type='string'
Action='write'
Value='[PLUGINSFOLDER]' />
然后插件安装程序可以检索注册表项,如下所示:
<Property Id="PLUGINSFOLDER">
<RegistrySearch Id='PluginsLocationSearch'
Root='HKLM'
Key='Software\Acme\Foo 1.x'
Name='PluginsLocation'
Type='raw' />
</Property>
要自动卸载插件以及主要产品,恐怕您必须编写自定义卸载程序 exe。该 exe 必须知道如何找到插件 MSI 产品代码并msiexec /x
为每个产品代码调用。
于 2009-08-27T14:17:43.043 回答