如果文件夹被其他产品使用,如何防止其卸载?

时间:2018-08-13 14:57:39

标签: windows-installer installshield

我有两个MSI项目,Setup1Setup2。两个MSI安装程序都有一个组件(CompXYZ),该组件具有动态文件链接并共享相同的文件。但是,当我在同一系统上安装Setup1Setup2时,在卸载任何产品(Setup1Setup2)期间,它会删除与CompXYZ相关的文件。如果系统上仍安装了任何产品Setup1Setup2,我想在卸载期间保持这些文件不变。

我尝试了组件的Shared属性以及Multiple Package Shared component属性,但是没有用。因为此组件具有动态文件链接,并且文件不是版本文件。

还有其他方法可以实现这种情况吗?

1 个答案:

答案 0 :(得分:1)

组件引用 :这些产品是否存在?如果可以帮助,请不要使用动态链接。您有组件引用问题,这是由动态链接引起的: Change my component GUID in wix? 本质上 :组件(及其文件)是由绝对路径关键路径)计算的参考。因此, if two setups install the same file to the same absolute path, they should use the same component GUID 。引用计数是同一文件-安装两个产品后,引用计数应为2。

一旦将组件GUID分配给关键路径,主机设置就会认为它“拥有”该路径。如果没有使用该组件注册其他客户端,则它认为可以在卸载时卸载该组件-其引用计数为1。请参阅上面的链接中的详细讨论。

解决方案 :这取决于您是否活着。如果您还活着,我将更改两个文件的安装路径,并为两个组件分配新的组件GUID,以“打破过去的联系”。您可以通过安装到其他文件夹,或仅稍稍更改文件名(这也会更改绝对路径)来执行此操作。如果您还没有上线,则可以将两个组件中的组件设置为使用相同的组件GUID。理想情况下,您会将此类组件放在合并模块中。

应该具有在同一安装程序的不同版本之间同步组件GUID的功能。我认为您将其添加到发布视图中。补丁优化之类的。我不会相信的我建议停止使用动态链接,并设置一个硬编码路径。并为每个组件使用一个文件。解决了各种问题,尤其是对于那些难以预测的软件包。