Пакет инсталляции содержит две Features «Клиент» и «Сервер». Есть группа файлов, которые ставятся и на клиенте и на сервере. Папки установки для Сервера и Клиента разные. InstallShield включает в пакет инсталляции две копии общих файлов. Как сделать, чтобы в пакете инсталляции содержалась одна копия общих файлов и была возможность инсталлировать их и в Клиента и в Сервер.
Заранее благодарен.
Здравствуйте, sidd, Вы писали:
S>Спасибо за ответ. В интерфейсе не нашел, занес запись вручную, но работает только при одновременной установке и Клиента и Сервера, а хотелось бы чтобы и при раздельной тоже работало. Подскажите пожалуйста, как этого добится.
В общем, идея в том, чтобы настраивать расположение для этих файлов в зависимости от того, какой вариант устанавливается: только сервер или только клиент. В одном из этих случаев указываем, что файлы должны распологаться в соответствующем каталоге. Если же устанавливаются оба, и клиент, и сервер, то включаем DuplicateFiles из одного каталога в другой.
Один из простых вариантов для этой схемы следующий:
1) Создать специальную Directory, которую по умолчанию настроить, допустим, на серверный каталог. Пусть название (ключ, поле Directory) имеет значение ClientServerCommonDir
2) Все общие файлы настроить на установку в директорию с идентификатором ClientServerCommonDir. Это в таблице Component, поле Directory_
3) Компоненты из п.2 (соответствующие общим файлам) настроить на принадлежность обеим feature.
4) В случае, если ставим
только клиентские файлы, перенаправляем ClientServerCommonDir на клиентскую директорию (API MsiSetTargetDirectory либо Custom Action типа 35). Это лучше делать после CostFinalize но перед InstallInitialize. Я не помню деталей почему так, просто посмотрел в свою инсталяшку, где я делаю смену директории. В MSDN, наверно, написано.
5) На Action DuplicateFiles вешаем condition, чтобы он выполнялся только в том случае, когда обе feature устанавливаются. Дублирование настраиваем из серверного каталога в клиентский.
5а) Записи в таблице DuplicateFile лучше всего ассоциировать с теми компонентами, из которых ставятся соответствующие файлы. Ну то есть, допустим, protocol.dll ставится компонентом protocol.component, тогда в таблице DuplicateFile у записи копирования protocol.dll поле Component_ должно быть protocol.component, это для чистоты и меньшего гемороя с апгрейдами. Ну и, конечно, это последнее замечание имеет смысл только в том случае, если у вас в инсталяшке соблюдается рекомендация MSFT что каждый компонент должен устанавливать не более одного бинарника.
Если чего не понятно — спрашивайте, я, к сожалению, не Рихтер, язык у меня не такой понятный.
Успехов!