2015-09-16 4 views
0

У меня есть установщик MSI, который регистрирует DLL. Я также хочу дать пользователям возможность вручную зарегистрировать одну и ту же DLL (может быть, другая версия). Рассмотрим случай, когда пользователь сначала устанавливает MSI, затем вручную регистрирует DLL (используя regsvr32). Предыдущий файл перезаписан. Когда я удаляю свой первоначальный MSI, перезаписываемая DLL также удаляется. Есть ли способ предотвратить это, если первая DLL была перезаписана.WIX удалить DLL из реестра, если он установлен

ответ

0

Вы можете использовать элемент FileSearch WiX, и если DLL с этой версией найдена, установите свойство соответствующим образом. Затем вы можете использовать это свойство, чтобы решить, должна ли DLL быть незарегистрирована или нет.
Я предполагаю, что для проверки, зарегистрирован ли пользователь вручную или нет, вам нужно сохранить эту информацию во время установки, например. где-то в Реестре. Затем вы можете сделать RegistrySearch для этого ключа.
Возможно, вам также необходимо установить атрибут Permanent компонента, а затем удалить его самостоятельно (в зависимости от установленного выше свойства).

0

Вы можете отправить эту другую Dll в отдельный MSI, убедившись, что она установлена ​​в том же месте и имеет тот же компонентный указатель. Это приведет к тому, что Windows узнает о том, что она будет использоваться совместно, и удаление одной MSI не приведет к удалению оставшейся Dll из-за этого совместного использования.

Не зная вашей точной ситуации, трудно понять, будет ли это работать. Если вы всегда отправляете более высокую версию, чем в текущей MSI, она будет работать. Если вы попытаетесь заменить эту Dll вручную более низкой версией файла, тогда восстановление вернет правильную версию с оригинальной MSI, так что у вас уже есть потенциальная проблема. Единственный безопасный способ поддерживать файлы, установленные с MSI, - это другое обновление типа MSI, такое как исправление, крупное обновление и т. Д.