Как преобразования экземпляров установщика Windows взаимодействуют с обновлениями? - PullRequest
4 голосов
/ 07 марта 2011

Я создал установочный пакет (через WIX), который использует преимущества преобразования экземпляров, чтобы можно было многократно устанавливать его на одном компьютере.Не думая об этом, я также добавил поддержку для крупных обновлений (как я делал это много раз ранее).

Сегодня новая версия продукта была установлена ​​впервые, и поведение былоне совсем то, что я ожидал: несмотря на то, что установка была нацелена на новый экземпляр, похоже, что все остальные экземпляры (все в более старой версии) были удалены.

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

Таким образом, вопрос :Как я могу создать этот установочный пакет таким образом, чтобы при установке новой версии обновлялся только целевой экземпляр, а другие экземпляры оставались в покое?

Я подозреваю, что ответ может заключаться в том, что я должен удалить «крупное обновление».в целом, но я видел несколько примеров установок с несколькими экземплярами, которые используют его, поэтому я не уверен.Кроме того, мне приходит в голову, что я, вероятно, неправильно обрабатываю код продукта, потому что он должен быть обновлен с помощью номера версии, но преобразования преобразования используют фиксированный код продукта.Почему-то я не думаю, что это проблема здесь, но я подумал, что должен упомянуть об этом на всякий случай.

Большое спасибо за любую помощь или понимание.

1 Ответ

3 голосов
/ 07 марта 2011

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

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

Вы можете прочитатьболее подробно об этом:

MSI с несколькими экземплярами и InstallShield 12

Вот объяснение того, как это работает в IS2009 + со снимками экрана пользовательского интерфейса загрузчика.

InstallShield 2009 Beta Part I (несколько экземпляров)

...