WiX: вернуть постоянный компонент в непостоянное состояние

Я пометил компонент, который пишет раздел реестра с Permanent="yes" приписывать. Позже я удалил этот атрибут, но компонент все еще считает его постоянным. Журнал удаления говорит:

Disallowing uninstallation of component: {XXXXXXXX-3955-519D-AC73-F6832147D388} since another client exists

Поиск в реестре Windows этого GUID не дает результата. Как очистить "Память установщика Windows"?

Документация к Permanent атрибут говорит

The installer registers an extra system client for the component in the Windows Installer registry settings (which basically just means that at least one product is always referencing this component)

но где можно найти и удалить этот "дополнительный системный клиент"?

1 ответ

Решение

AFAIK Это может быть "деинсталлировано" только путем непосредственного удаления записи из реестра. Вы сможете найти компонент под HKEY_CLASSES_ROOT\Installer\Components, Keyname компонента является упакованным guid. Согласно этому, упакованный GUID может быть разработан по следующим правилам:

Упакованный GUID может быть получен путем применения преобразования к стандартному GUID. Это преобразование выполняет следующие операции:

  • удаляет фигурные скобки и отделяет тире от стандартного GUID
  • записывает первые три группы шестнадцатеричных символов в стандартном GUID в обратном порядке
  • переключает каждые два символа в четвертой и пятой группе в стандартный GUID

Не забудьте сначала сделать резервную копию reg на всякий случай, а также убрать установленные файлы, прежде чем пытаться установить непостоянный пакет.

Другой вариант - дать компоненту новый guid и просто оставить старый как есть.

Другие вопросы по тегам