Проблема с Wix Burn: при удалении возникает ошибка с сообщением «Найдена зависимость»

Я сделал пакет записи, который инкапсулирует 2 msi (msi1, msi2). В пользовательском интерфейсе я использую флажки, чтобы попросить пользователя выбрать, какой MSI установить.

Теперь, если пользователь выбирает один из msi для установки, установка проходит нормально. Но во время удаления файл журнала записи говорит:

[][:15]: Detected package: Netfx4Full, state: Present, cached: None

[][:15]: Detected package: DummyInstallationPackageId3, state: **Absent**, cached: None

[][:15]: Detected package: msi2.msi, state: **Present**, cached: Complete

[][:15]: Detect complete, result: 0x0
[][:16]: Plan 3 packages, action: Uninstall
[][:16]: Will not uninstall package: msi2.msi,   found dependents: 1
[][:16]: Found dependent: {08e74372-83f2-4594-833b-e924b418b360}, name: My Test Application

В сценарии установки я решил установить msi2, а НЕ msi1.

Мой код пакета выглядит так:

<Bundle Name="My Test Application" Version="1.0.0.0" Manufacturer="Bryan" UpgradeCode="CC2A383C-751A-43B8-90BF-A250F7BC2863">

<Chain>

<PackageGroupRef Id='Netfx4Full' />

<MsiPackage  Id="DummyInstallationPackageId3"
SourceFile="msi1.msi"
ForcePerMachine="yes"
InstallCondition="var1 = 1"
>
</MsiPackage>

<MsiPackage 
SourceFile="msi2.msi"
Vital="yes" Cache="yes"  Visible="no"
ForcePerMachine="yes"
InstallCondition="var2 = 2"
>
</MsiPackage>
</Chain>

Мой OnDetectPackageComplete() выглядит так:

 private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e)
  {
    if (e.PackageId == "DummyInstallationPackageId3" )
    {
      if (e.State == PackageState.Absent)
        InstallEnabled = true;

      else if (e.State == PackageState.Present)
        UninstallEnabled = true;
    }
  }

Что мне делать, чтобы пакет записи мог свободно удалить msi, который пользователь выбрал во время установки. Кроме того, если я выберу оба msi для установки, удаление будет работать нормально.

ИМО, есть некоторая проблема ч/б отношения комплекта и 2 msi. Пожалуйста, помогите мне, так как я застрял с этой проблемой.


person Vivek Chaurasiya    schedule 10.10.2012    source источник


Ответы (1)


Ваш реестр может быть испорчен из-за большого количества проб и ошибок при создании вашего первого загрузчика Burn. Я бы посоветовал попробовать следующее:

  1. Найдите в реестре «зависимых» (например: {08e74372-83f2-4594-833b-e924b418b360}) и удалите эти ключи.
  2. Удалите приложение (должно пройти успешно)
  3. Найдите в реестре код продукта другого MSI-файла, который вы установили ранее. Убедитесь, что его нет в реестре. Если он существует, удалите эти ключи.
  4. Попробуйте переустановить и посмотреть, сможете ли вы удалить все в порядке.
person BryanJ    schedule 16.10.2012
comment
Я согласен с вашей работой, но проблема в моем коде modelView. Скажем, я установил только msi2.msi, и все прошло нормально. Теперь, чтобы удалить, когда я продолжил; пользовательский интерфейс, который я получаю, имеет активную кнопку «Установить». Поскольку DummyInstallationPackageId3 (msi1.msi) не установлен, следовательно, кнопка «Установить» становится активной. Есть ли способ исправить это поведение? Я в основном следовал примеру, приведенному в вашем блоге. - person Vivek Chaurasiya; 17.10.2012
comment
В этом случае у вас может быть свойство для каждого пакета, что-то вроде InstallEnabledPackageId3 и InstallEnabledPackageId2. Затем привяжите кнопку установки к InstallEnabled и определите ее как public bool InstallEnabled { get { return (InstallEnabledPackageId3 && InstallEnabled PackageId2)? правда : ложь; } } - person BryanJ; 17.10.2012
comment
Наличие 2 логических значений помогло решить проблему. Я надеялся, что проблема более сложна по отношению к «зависимости»; но даже индивидуальная установка/удаление msi2.msi проходит нормально. Спасибо. Хотя мне было интересно, почему Burn регистрирует имя пакета как зависимость для отдельных msi? Я видел эту информацию в журнале записи. - person Vivek Chaurasiya; 18.10.2012