Установщик WiX с несколькими функциями удаляет общий RegistryValue - PullRequest
0 голосов
/ 30 августа 2018

У меня есть встроенный установщик wix с несколькими функциями: Feature1 и Feature2. При первой установке, если установлены обе функции, то Feature2 удаляется, что не позволяет должным образом удалить Feature1. Я сузил его до Feature2, удалив значение реестра, которое также использует Feature1, в результате чего Feature1 стала рекламироваться.

И Feature1, и Feature2 используют компоненты, которые используются в продуктах нескольких компаний с помощью модулей слияния. Обе функции ссылаются на разные модули слияния, которые ссылаются на одно и то же значение реестра.

<Feature Id="Feature1" Absent="disallow" Level="1" Title="Main Feature" AllowAdvertise="no">
    <!--- Component References for Feature1 product are here ---->
    <MergeRef Id="CompanyLibrary.msm" />
</Feature>
<Feature Id="Feature2" Absent="disallow" Level="1" Title="Company Library SDK" AllowAdvertise="no">
    <MergeRef Id="CompanyLibrarySDK.msm" />
</Feature>

CompanyLibrary.wxs

<?define PackageId = "123..." ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Module Id="$(var.ProductShortName)" Language="1033" Version="$(var.ProductVersion)">
    <Package Id="$(var.PackageId)" Manufacturer="$(var.Manufacturer)" InstallerVersion="$(var.InstallerVersion)"
                Description="$(var.ProductDesc)" Comments="$(var.ProductName)" />

    <Directory Id="TARGETDIR" Name="SourceDir" >
        <?include ..\ProgramMenu.wxi ?>
        <Directory Id="BIN" Name="bin" FileSource="..\..\Source\">

            <Component Id="CompanyLibrary.dll" Guid="{1A.....}" DiskId="1" Location="local" SharedDllRefCount="yes">
                <File Id="CompanyLibrary.dll" Name="CompanyLibrary" KeyPath="yes" />
            </Component>

        </Directory>
    </Directory>
</Module>
</Wix>

CompanyLibrarySDK.wxs

<?define PackageId = "5678....." ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Module Id="$(var.ProductShortName)" Language="1033" Version="$(var.ProductVersion)">
    <Package Id="$(var.PackageId)" Manufacturer="$(var.Manufacturer)" InstallerVersion="$(var.InstallerVersion)"
                Description="$(var.ProductDesc)" Comments="$(var.ProductName)" />

    <Directory Id="TARGETDIR" Name="SourceDir">
        <?include ..\ProgramMenu.wxi ?>
        <Directory Id="DocumentationFolder" Name="Documentation" FileSource="..\Documents">

            <Component Id="CompanyLibrary.chm" Guid="{2B....}" SharedDllRefCount="yes" Location="local">
                <File Id="CompanyLibrary.chm" Name="CompanyLibrary.chm" DiskId="1" KeyPath="yes" />
            </Component>

            <Component Id="Shortcut2CompanyLibrary.chm">
                <RegistryValue Id="CompanyLibraryHelpReg" Root="HKCU" Key="Software\Company\Documentation\CompanyLibraryHelp" Type="string" Value="" KeyPath="yes" />
                <Shortcut Id="Shortcut2CompanyLibrary"
                             Target="[!CompanyLibrary.chm]"
                             Directory="CompanyDocuments"
                             Name="CompanyLibrary Help File"
                             Show="normal" />
            </Component>
        </Directory>
    </Directory>
</Module>
</Wix>

А вот файл, вызывающий проблему: ProgramMenu.wxi

<?xml version="1.0" encoding="utf-8"?>
<Include>
  <Directory Id="ProgramMenuFolder">
    <Directory Id="CompanyShortcuts" Name="Company">
      <Component Id="CompanyShortcuts" Guid="{999AAA...}" SharedDllRefCount="yes">
        <RegistryValue Id="CompanyShortcutsReg" Root="HKCU" Key="Software\Company" Type="string" Value="" KeyPath="yes" />
        <RemoveFolder Id="RemoveCompanyShortcuts" Directory="CompanyShortcuts" On="uninstall"/>
      </Component>
      <Directory Id="CompanyDocuments" Name="Documentation">
          <Component Id="CompanyDocuments" Guid="{98765....}" SharedDllRefCount="yes">
              <RegistryValue Id="CompanyDocuments" Root="HKCU" Key="Software\Company\Documentation" Type="string" Value="" KeyPath="yes" />
              <RemoveFolder Id="RemoveCommonDocuments" Directory="CommonDocuments" On="uninstall"/>
          </Component>
       </Directory>
    </Directory>
  </Directory>
</Include>

Оба параметра RegistryValues, указанные выше, удаляются, когда Feature1 все еще установлен, но Feature2 удален. Я немного упростил код, но, надеюсь, он по-прежнему имеет смысл. Я относительно новичок в WiX и пытаюсь понять этот установщик, который я унаследовал. Насколько я понимаю, не должен ли счетчик ссылок для компонентов CompanyShortcuts и CompanyDocuments отслеживаться окнами или что мне нужно сделать, чтобы окна отслеживали счетчики ссылок для обоих компонентов?

...