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