Wix - удалить все файлы при применении крупного специального обновления

В предыдущей версии установщика, созданной Wix, существует следующий код:

<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

Чтобы обойти ошибку в установщике Windows, описанную в этой статье базы знаний, был исправлен код:

<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize" />
</InstallExecuteSequence>

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

Если я открою второй установщик и нажму «Восстановить» - появятся все файлы.

Что не так и как эту проблему исправить?

P.S. Извините за мой английский :(


person amlet.fb    schedule 12.01.2012    source источник


Ответы (1)


Просто предположение: похоже, что первая и вторая установки устанавливают одни и те же файлы, но как часть компонентов с разными идентификаторами компонентов. Чтобы убедиться в этом, вы можете открыть оба файла msi с помощью orca.exe и сравните идентификаторы компонентов.

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

Если вы следуете правилу установщика Windows, согласно которому содержимое компонента никогда не должно изменяться (т. Е. Никогда не удалять и не добавлять в него файлы), то идентификаторы GUID компонентов, сгенерированные wix, должны автоматически оставаться стабильными. Это одна из причин, по которой лучше всего иметь один компонент на файл.

person Wim Coenen    schedule 12.01.2012
comment
Файлы имеют только одинаковые имена, но разные файлы (хеши файлов разные). ComponentIds такие же. - person amlet.fb; 13.01.2012
comment
@ amlet.fb: если идентификаторы компонентов совпадают, то мой ответ ничего не объясняет, извините. - person Wim Coenen; 14.01.2012