У меня возникают проблемы с удалением общей сборки win32 SxS с помощью Wix3 на WinXP. Мой файл wix очень похож на описанный в http://n2.nabble.com/Tutorial-How-to-install-files-into-WinSxS-td841475.html.
Проблема в том, что если модуль из сборки используется, деинсталлятор завершается с кодом ошибки успеха, но оставляет сборку в сломанном состоянии: манифест и каталог безопасности были удалены, но каталог сборки все еще существует с моими dll в нем. . Библиотеки DLL сохраняются после перезагрузки, поэтому они никоим образом не помечаются для удаления. В файле журнала MSI нет явных ошибок.
Если я пытаюсь переустановить пакет, он пропускает установку сборки. Компоненты больше не зарегистрированы, поэтому я не могу заставить установщика повторить попытку удаления. В журнале msi при последующих установках отображается следующее:
MSI (c) (98:44) [11:46:56:263]: пропустить установку компонента сборки: {26A273E7-7F9A-4F77-9FA8-5E413A155BEC}, поскольку сборка уже существует
Я не могу найти способ вернуть SxS в нормальное состояние, кроме как вручную удалить каталог моей сборки, который на данный момент больше не защищен средством восстановления системы XP.
Хотя мой реальный установщик намного сложнее, я смог воспроизвести это с помощью очень простого установщика, который имеет одну функцию, содержащую один компонент. Этот компонент содержит dll, манифест и каталог безопасности. Для элемента dlls ‹File› установлены атрибуты KeyPath, Assembly и AssemblyManifest. После установки я могу имитировать процесс загрузки сборки, открыв DLL в MSVS.
Есть ли дополнительное действие, которое я должен вызвать при удалении, чтобы обнаружить и предотвратить эту ситуацию? В качестве альтернативы, есть ли способ принудительно выполнить операцию установки, даже если библиотеки DLL уже существуют в WinSXS?
Несколько связанно, у меня тоже проблема, если я пытаюсь обновить пакет, который установил сборку, если сборка не меняется. Установщик решает, что ему не нужно переустанавливать сборку (так как она не менялась), но потом при запуске SxsUninstallCA идет и удаляет сборку. С точки зрения установщика компонент все еще установлен, но файлы исчезли.