Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Heat生成可重用的COM注册组件?_Com_Wix_Reusability_Heat - Fatal编程技术网

如何使用Heat生成可重用的COM注册组件?

如何使用Heat生成可重用的COM注册组件?,com,wix,reusability,heat,Com,Wix,Reusability,Heat,我使用WIX工具集中的util生成dll的COM注册。在只有一个产品使用该dll之前,所有这些都可以正常工作 但是,当此dll已由其他产品注册或由以后安装的产品使用时,卸载我的产品将删除dll注册并中断其他应用程序 有没有办法克服这个问题?我有一个想法,使生成的组件永久化,但似乎没有简单的方法来实现它。这不是理想的情况,因为如果我们的应用程序是使用该DLL的opny应用程序,那么最好删除DLL注册 另一个问题是注册dll更改以前的注册,即使它有更新的版本。它将再次破坏其他应用程序。如果已经安装,

我使用WIX工具集中的util生成dll的COM注册。在只有一个产品使用该dll之前,所有这些都可以正常工作

但是,当此dll已由其他产品注册或由以后安装的产品使用时,卸载我的产品将删除dll注册并中断其他应用程序

有没有办法克服这个问题?我有一个想法,使生成的组件永久化,但似乎没有简单的方法来实现它。这不是理想的情况,因为如果我们的应用程序是使用该DLL的opny应用程序,那么最好删除DLL注册

另一个问题是注册dll更改以前的注册,即使它有更新的版本。它将再次破坏其他应用程序。如果已经安装,我们希望使用never版本


有人能推荐一个简单的解决方案来解决上述问题吗?

添加共享DLL时,您应该将DLL封装在两个产品中具有相同ID的组件中。组件将在尚未安装时安装。当最后一个使用它的产品卸载时,它将被删除。使用WiX库来处理共享组件

您必须找到该共享DLL的安装位置。卸载产品A时,您会期望删除产品的安装文件夹,并为产品B显示相同的文件夹。因此,共享DLL应位于公用文件树中


由于COM注册始终具有指向COM服务器DLL的绝对路径,因此它始终绑定到相应产品中的DLL。如果产品安装人员不共享有关共享DLL的知识,您的产品应避免共享DLL。您可以使用来实现这一点。

但此组件不仅仅在我的安装程序中使用。“产品A”是第三方。我将尝试获取它的组件ID,但不希望它能正常工作=(.您问题的标题提到了一个
可重用COM注册组件
。当您有第三方安装程序时,他们将不会重用您的安装程序组件。是的,标题可能没有详细描述问题…对不起。但实际上我需要使我的组件在我的产品中可重用,而其他一些产品可能会重复使用已经使用该dll并执行COM注册。他们不会将dll放入共享文件夹中,并在卸载时将其删除。理想情况是将我的dll与“他们的”dll分开.但据我所知,这是不可能的,因为有共享的COM对象。否则我就不会问这个问题。你知道这种情况下的解决方法吗?关于免注册COM-很好。但我为其创建安装程序的产品已经完成,不幸的是,按照这种方法重新制作它们不是一个选项=(您描述的问题是所谓的DLL地狱。这不是安装程序问题。当您尝试将产品复制到目标PC并使用regsvr32注册COM服务器时,您也会遇到同样的问题。删除上次注册的COM服务器(与卸载上次安装的产品相同)断开以前运行的产品。请参阅:当您的产品(为什么用复数形式编写?)无法解决DLL问题时,它尚未完成。很抱歉,您无法使用安装程序解决问题。