Вопрос об обновлении WiX - основная версия файла была увеличена, но ревизия ниже, теперь старый файл удален, но новый файл не копируется во время обновления - PullRequest
5 голосов
/ 29 июля 2011

Я автоматически генерирую файл WiX для моего установщика на основе каталога (он предназначен для веб-приложения) и содержит ссылки на следующие 3 .Net сборки:

  • Migrator.dll
  • Migrator.Framework.dll
  • Migrator.Providers.dll

А вот сгенерированные фрагменты WiX:

<Fragment>
<DirectoryRef Id="bin">
  <Component Id="bin.Migrator.dll" Guid="*">
    <File Id="bin.Migrator.dll" Name="Migrator.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.dll" />
  </Component>
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="bin">
  <Component Id="bin.Migrator.Framework.dll" Guid="*">
    <File Id="bin.Migrator.Framework.dll" Name="Migrator.Framework.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.Framework.dll" />
  </Component>
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="bin">
  <Component Id="bin.Migrator.Providers.dll" Guid="*">
    <File Id="bin.Migrator.Providers.dll" Name="Migrator.Providers.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.Providers.dll" />
  </Component>
</DirectoryRef>
</Fragment>

Мы использовалита же самая базовая структура установщика в течение года или около того, но недавно мы обновили библиотеки Migrator.Net до новой внутренней сборки, в которой номера версий и атрибуты заголовка / описания сборки изменились с (выгружены из Orca)

  • bin.Migrator.dll bin.Migrator.dll Migrator.dll 16384 3.0.1317.0 0 512 78
  • bin.Migrator.Framework.dll bin.Migrator.Framework.dll pi0mozkr.dll | Мигратор.Framework.dll 20992 3.0.1317.0 0 512 79
  • bin.Migrator.Providers.dll bin.Migrator.Providers.dll jq05waoy.dll | Migrator.Providers.dll 73216 3.0.1317.0 0 512 82

До, после обновления библиотек:

  • bin.Migrator.dll bin.Migrator.dll Migrator.dll 16384 3.2.0.1 0 512 55
  • bin.Migrator.Framework.dll bin.Migrator.Framework.dll pi0mozkr.dll | Migrator.Framework.dll 28160 3.2.0.1 0 512 56
  • bin.Migrator.Providers.dll bin.Migrator.Providers.dll jq05waoy.dll | Migrator.Providers.dll 79872 3.2.0.1 0 512 57

Хотя младшая версия выше, ревизия теперь 1 вместо 1317.

С тех пор мы обнаружили, что при обновлении до новой версии эти 3 файла не копируются(поэтому процесс обновления удаляет старые файлы, но не устанавливает новые файлы).

Может ли это быть связано с изменением номера версии сборок и, если да, есть ли способ переопределить это поведение (мы просто хотим удалить все, а затем скопировать все заново, независимо от версии).

Интересно, что если вы установите, затем повторно запустите установщик и выполните «восстановление», которое действительно скопирует новые файлы - я полагаюэто потому что если файла больше нет, поэтому логика проверки версии файла не применяется?

Любые советы как о том, как это работает, так и о том, как избежать возникшей у нас проблемы с обновлением, будут весьма полезны.

1 Ответ

0 голосов
/ 29 июля 2011

Как подсказывает связанный вопрос , вы можете попытаться повторно запланировать RemoveExistingProducts , чтобы старый продукт был удален до установки любых новых файлов, например:

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallValidate" />
    <!-- other actions -->
</InstallExecuteSequence>

Другой вариант - изменить свойство REINSTALLMODE и заменить режим e на a, то есть его значение будет amus. Таким образом, все файлы будут переустановлены, операция займет больше времени, но будет более надежной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...