WiX:如何在复制到另一家公司的bin文件夹时引用计数共享DLL?

时间:2013-11-21 19:35:18

标签: wix wix3.5

我的产品有两个版本,需要将一些共享的DLL放入另一个公司的bin文件夹中。我能够通过使用CopyFile元素来实现这一点,但我无法使引用计数机制起作用。我遇到的问题是,当安装两个版本(支持的方案),然后卸载一个版本时,这些共享的DLL将被删除,这会导致其他版本出现问题。

我试图从几个角度来解决这个问题,但没有任何成功。这甚至可能吗?或者我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:0)

我找到了一个适合我的解决方案。

  1. 首先,我使用RegistrySearch元素将路径存储到Proprty元素中。

  2. 其次,我在两个版本中创建了一个具有相同GUID的新组件元素。在这个组件中,我创建了一个新的RegistryValue并将其用作关键路径。然后为每个共享DLL添加了CopyFile Elements。

  3. 在Feature Element中添加了ComponentRef元素。

  4. 以下是第1部分的代码:

    <Property Id="ANOTHERPRODUCTSPATH">
      <RegistrySearch Id="ANOTHERPRODUCTSPATH" Root="HKLM" Key="SOFTWARE\Wow6432Node\XXXX\XXXX\XXXXX" Name="[whateverItIs]" Type="raw" />
    </Property>
    

    以下是第2部分的代码:

    <Component Id="CommonDLLs" Guid="[Your-GUID]" Directory="Doesn'tMatterButRequiredForSomeReason">
      <RegistryValue Id="yourid" Root="YourRoot" Key="YourNewKey" Name="Installed" Value="1" Type="integer" KeyPath="yes" />
      <CopyFile Id="Shared1.dll" FileId="Shared1.dll" DestinationProperty="ANOTHERPRODUCTSPATH" DestinationName="Shared1.dll"/>
      <CopyFile Id="Shared2.dll" FileId="Shared2.dll" DestinationProperty="ANOTHERPRODUCTSPATH" DestinationName="Shared2.dll"/>
      ...//the rest of your shared dlls
    </Component>
    

    对于第3部分:

    <Feature Id="ProductFeature" Title="$(var.ProductNameLong)" Level="1"
             ConfigurableDirectory="INSTALLLOCATION" TypicalDefault="install" >
    
      ...//existing componentrefs
      <ComponentRef Id="CommonDLLs" />
    
    
    </Feature>