我的产品有两个版本,需要将一些共享的DLL放入另一个公司的bin文件夹中。我能够通过使用CopyFile元素来实现这一点,但我无法使引用计数机制起作用。我遇到的问题是,当安装两个版本(支持的方案),然后卸载一个版本时,这些共享的DLL将被删除,这会导致其他版本出现问题。
我试图从几个角度来解决这个问题,但没有任何成功。这甚至可能吗?或者我在这里遗漏了什么?
答案 0 :(得分:0)
我找到了一个适合我的解决方案。
首先,我使用RegistrySearch元素将路径存储到Proprty元素中。
其次,我在两个版本中创建了一个具有相同GUID的新组件元素。在这个组件中,我创建了一个新的RegistryValue并将其用作关键路径。然后为每个共享DLL添加了CopyFile Elements。
在Feature Element中添加了ComponentRef元素。
以下是第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>