如果设置它,WIX将从注册表中删除DLL

时间:2015-09-16 07:14:40

标签: dll wix windows-installer wix3.7 wix3.8

我有一个注册DLL的MSI安装程序。我还想让用户选择手动注册相同的DLL(可能是不同的版本)。考虑用户首先安装MSI,然后手动注册DLL(使用regsvr32)的情况。之前的文件被覆盖。 当我卸载我的初始MSI时,也会删除被覆盖的DLL。有没有办法可以防止在第一个DLL被覆盖的情况下发生这种情况。

2 个答案:

答案 0 :(得分:0)

您可以使用WiX的FileSearch元素,如果找到具有此版本的DLL,则相应地设置属性。然后,您可以使用此属性来确定DLL是否应该取消注册 我想检查用户是否手动注册,你必须在安装过程中保存该信息,例如在注册表的某个地方。然后,您也可以为此密钥执行RegistrySearch 您可能还必须设置组件的Permanent - 属性,然后自行删除它(取决于上面设置的属性)。

答案 1 :(得分:0)

您可以将其他Dll发送到单独的MSI中,确保它安装在同一位置并具有相同的组件guid。这将导致Windows知道它被共享,卸载一个MSI不会因为共享而删除剩余的Dll。

如果不了解您的具体情况,很难知道这是否有效。如果您始终发布的版本高于当前MSI中的版本,那么它将起作用。如果您尝试使用较低的文件版本手动替换该Dll,则修复将从原始MSI恢复正确的更高版本,因此您已经存在潜在的麻烦。维护MSI安装文件的唯一安全方法是使用另一种MSI类型更新,如补丁,主要升级等。