Лучший способ развернуть EXE, совместно используемый несколькими приложениями - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть приложения A и B, в обоих из которых используется общий компонент S. Если бы S был сборкой DLL, я бы просто поместил копию этого приложения в каждое приложение как частную сборку.Но S - это EXE, и A и B общаются с ним по протоколу.Когда A и B работают, они должны общаться с одним и тем же экземпляром S. Возможные сценарии:

  1. Пользователь устанавливает A, а S устанавливается вместе с ним, поскольку A зависит от S. Позже пользователь устанавливаетB, но S не установлен, потому что он уже там.
  2. Пользователь устанавливает A, и S устанавливается вместе с ним.Позже пользователь устанавливает B, который поставляется с более новой версией S. S заменяется новой версией.
  3. A и B устанавливаются (и S).Пользователь удаляет B, но S сохраняется, потому что A все еще там.Позже пользователь удаляет A и S тоже удаляется, потому что от этого больше не зависит ни одно приложение.

Новые версии S будут совместимы с более старыми версиями A и BE g.если протокол изменяется, S будет поддерживать как старый, так и новый протокол и т. д.

Какая стратегия развертывания будет наилучшей в этом случае?Я использую установщик Windows (MSI).Кажется, хорошо иметь S как отдельное приложение с отдельным MSI и вызывать этот MSI из других MSI, но, возможно, есть более подходящие подходы.Может быть, МСМ? .. Я бы хотел, чтобы установка была простой.Заранее спасибо за ваши ответы.

1 Ответ

0 голосов
/ 29 февраля 2012

MSI использует подсчет ссылок, чтобы позаботиться о вашем точном сценарии.Уникальному элементу (местоположению и двоичному файлу) должен быть присвоен GUID компонента, а затем этот GUID компонента должен быть общим для MSI.Это легко сделать, если вы используете WiX через общий фрагмент, который скомпилирован в оба MSI (A & B).Затем, когда вы устанавливаете A & B, независимо от порядка, счетчик ссылок S будет увеличиваться, и, таким образом, удаление одного не удалит exe, если другой установил его также.

Ключ должен убедиться, что оба MSI используют один и тот же GUID компонента и установить S в одно и то же место.

EDIT - добавление URL-адреса в компонент, считая с MSDN

http://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx

Обратите внимание, что атрибут называется msidbComponentAttributesSharedDllRefCount, но я считаю, что он должен работать для вашего сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...