Установите несколько экземпляров MSI с динамическим именем экземпляра - PullRequest
10 голосов
/ 07 января 2011

Наш продукт имеет установщик MSI (написанный на WiX), который в основном копирует некоторые файлы в папку c: \ ourproduct и устанавливает службу windows "ourwindowsservice".

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

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

Есть идеи?

Преобразование экземпляра , кажется, требует предварительно определенного и предварительно названного набора экземпляров.

Спасибо

Ответы [ 2 ]

9 голосов
/ 07 января 2011

Столбец имени таблицы ServiceInstall имеет форматированный тип. Это означает, что вы можете использовать свойства во время выполнения для управления именем.

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

2 голосов
/ 07 января 2011

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

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

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

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