2011-01-06 1 views
10

Наш продукт имеет установщик MSI (написанный в WiX), который в основном копирует некоторые файлы в папку c: \ ourproduct и устанавливает службу Windows «наш интерфейс».Установить несколько экземпляров MSI с динамическим именем экземпляра

Мы хотели бы добавить поддержку нескольких экземпляров службы, и их можно будет устанавливать и удалять независимо друг от друга. Аналогично, например, для SQL Server каждый экземпляр должен иметь имя, которое может быть передано MSI в качестве параметра командной строки.

Пример: экземпляр "A" => копировать файлы в "C: \ ourproductA", установить услугу, как "ourwindowsserviceA" экземпляра "B" => копировать файлы в "C: \ ourproductB", установить услугу, как " ourwindowsserviceB " ...

Есть идеи?

Instance transformation, по-видимому, требует предопределенного и предварительно заданного набора экземпляров.

Благодаря

ответ

9

колонок Имени ServiceInstall таблицы является Форматированным Типом. Это означает, что вы можете использовать свойства во время выполнения, чтобы управлять именем.

Несколько лет назад я написал статью в блоге для нескольких инсталляторов экземпляров. В комментариях кто-то спросил о динамическом количестве экземпляров, и я говорю о том, что нужно сделать. В основном вам придется написать файл bootstrapper.exe с пользовательским интерфейсом и может привести к созданию преобразований с уникальными свойствами. Используя C# и WiX/DTF для вашего MSI Interop, это на самом деле вполне возможно. Я просто никогда не чувствовал необходимости на самом деле делать это. Я был полностью доволен Продуктом, Продуктом-1 ... Продукт-15, и все готово. Короткие сокращения должны выполняться пользовательским действием, поскольку они не поддерживают тип Formatted, но INSTALLDIR может быть изменен, а ServiceNames поддерживают форматирование.

+0

Спасибо, Кристофер! Ваша статья в блоге по-прежнему доступна онлайн? – Max

+0

http://blog.deploymentengineering.com/2006/10/multiple-instance-msis-and.html и http://blog.deploymentengineering.com/2008/03/installshield-2009-beta-part-i.html –

+0

+1 Ответ Криса. Кстати, я был одним из тех, кто задавал вопросы о нескольких экземплярах в комментариях упомянутого сообщения в блоге. :) Еще раз спасибо, Крис, это мне очень помогло! Позже я поделился своим опытом в этой области здесь: http://ysdevlog.blogspot.com/2008/12/multiple-instance-installations-and.html. Если вы также подумаете об обновлении через патчи, вам может показаться интересным прочитать его до конца и обратить особое внимание на ссылку, которую я разделяю в последнем комментарии. Удачи! –

2

К сожалению, указанная вами статья верна, Windows Installer не поддерживает динамические экземпляры. Даже коммерческие инструменты, поддерживающие несколько экземпляров, требуют определения экземпляров с самого начала. Поэтому в вашем случае вам нужно будет определить экземпляры A, B, C и т. Д. Вручную, прежде чем генерировать установщик.

Это потому, что продукт идентифицирован его ProductCode (между прочим), поэтому вам необходимо применить преобразование к MSI, которое изменяет идентификатор. Очень сложно создавать преобразования на лету, потому что вам нужны специальные инструменты или API-интерфейс Windows Installer, который обычно не найден на пользовательской машине.

Однако, как упоминал Кристофер, вы можете попробовать имитировать динамический экземпляр, используя свойства установщика. Эти свойства могут быть установлены через пользовательский интерфейс установки или пользовательский загрузочный файл.

Смежные вопросы