WiX多实例-卸载最后一个实例时删除自定义资源

WiX多实例-卸载最后一个实例时删除自定义资源,wix,certificate,multiple-instances,Wix,Certificate,Multiple Instances,我正在使用WiX为我的产品创建一个多实例MSI MultiInstance=“yes”属性解决了在多实例环境中管理所有受支持资源(如文件、注册表值、windows服务等)的问题 但是,我不知道如何处理非内置资源类型(如证书)的相同问题。在每个实例上创建单独的证书安装并在每个实例上删除它没有问题卸载 但是如果我需要一个共享证书呢? 这意味着第一个安装的实例将创建它,最后一个删除的实例将删除它(相当于具有MultiInstance=“no”的组件) 我正在使用此处描述的方法为我的MSI实现多个实例:

我正在使用WiX为我的产品创建一个多实例MSI

MultiInstance=“yes”
属性解决了在多实例环境中管理所有受支持资源(如文件、注册表值、windows服务等)的问题

但是,我不知道如何处理非内置资源类型(如证书)的相同问题。在每个实例上创建单独的证书安装并在每个实例上删除它没有问题卸载

但是如果我需要一个共享证书呢? 这意味着第一个安装的实例将创建它,最后一个删除的实例将删除它(相当于具有
MultiInstance=“no”
的组件)

我正在使用此处描述的方法为我的MSI实现多个实例:

http://ysdevlog.blogspot.co.il/2011/08/revisited-multiple-instance.html
简而言之,每个实例都在预定义的注册表位置“注册”自身,因此我可以知道当前安装的实例:

<Component Id="RegistryComponent" Guid="{GUIDGOES-HERE-45e5-ABFD-07E5CC4D7BC9}" MultiInstance="yes">
      <RegistryKey Id="MainRegKey" Action="createAndRemoveOnUninstall" Root="HKLM" Key="SOFTWARE\MultiInstanceTest\[ProductCode]">
         <RegistryValue Id="MainRegValue" Name="InstanceId" Value="[INSTANCEID]" Type="string" />
         <RegistryValue Id="InstallPathValue" Name="Location" Value="[ProductNameFolder]" Type="string" />
         <RegistryValue Id="ProductCodeValue" Name="ProductCode" Value="[ProductCode]" Type="string" />
         <RegistryValue Id="ProductNameValue" Name="ProductName" Value="[ProductName]" Type="string" />
         <RegistryValue Id="ProductVersionValue" Name="ProductVersion" Value="[ProductVersion]" Type="string" />
      </RegistryKey>
   </Component>

这有助于我使用一个小型外部程序来管理实例的安装和删除,该程序基本上读取此注册表位置并发出
msiexec
命令

我需要能够确定它是否是删除任何自定义共享资源(例如证书)的最后一个实例。 使用
RegistrySearch
没有帮助,因为它在删除注册表项之前运行-因此它将始终找到仍然完整的键/值

如何确定当前卸载是否正在删除最后一个实例